Zaa*_*ise 4 python postgresql psycopg2 flask
当我执行程序application.py 时,出现此错误:
psycopg2.ProgrammingError
ProgrammingError: ERREUR: erreur de syntaxe sur ou près de « "/d" »
LINE 1: "/d" carto."BADGES_SFR"
Run Code Online (Sandbox Code Playgroud)
(英文“ ProgrammingError: ERREUR: syntax error at or near « "/d" » "
)我对这个程序的目标是获得表结构
这是以下代码application.py:
#!/usr/bin/python 2.7.6
# -*- coding:utf-8 -*-
import os
import sys
from flask import Flask,render_template
import psycopg2
reload(sys)
sys.setdefaultencoding('utf8')
app = Flask(__name__)
@app.route('/')
def fihoum():
conn = psycopg2.connect(database="carto", user="postgres", password="daed5Aemo", host="192.168.12.54")
cur = conn.cursor()
#cur.execute("SELECT * FROM carto.\"BADGES_SFR\"")
cur.execute("/d carto.\"BADGES_SFR\"")
rows = cur.fetchall()
return render_template('hello.html', titre="Données du client BADGES_SFR !",mots=rows)
if __name__=="__main__":
app.run(host=os.getenv('IP', '0.0.0.0'),
port=int(os.getenv('PORT',5000)),
debug=True)
Run Code Online (Sandbox Code Playgroud)
首先是\d <table_name>
(注意\d
不是反斜杠/d
),但这仅在psql
交互式终端中可用
我用这个程序的[目标]是获得表结构
您可以使用information_schema.columns
带有您想要的信息的 SQL 表
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = '<table_name>';
column_name | data_type | is_nullable
--------------------+-------------------+-------------
column_a | integer | YES
column_b | boolean | NO
Run Code Online (Sandbox Code Playgroud)
以下是可用列的列表:https : //www.postgresql.org/docs/9.4/static/infoschema-columns.html
片段
import psycopg2
conn = psycopg2.connect(database='carto', user=..., password=...)
q = """
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = %s;
"""
cur = conn.cursor()
cur.execute(q, ('BADGES_SFR',)) # (table_name,) passed as tuple
cur.fetchall()
# Example Output
[('column_a', 'integer', 'YES'),
('column_b', 'boolean', 'NO'),
...,
]
Run Code Online (Sandbox Code Playgroud)
Jinja2/Flask 集成提示:
考虑使用psycopg2.extras.DictCursor
,它会让你更容易拉基于列名(字典键)在瓶模板中的信息,因为your'll一个有字典,你可以通过访问如row['data_type']
,row['column_name']
等
如果您只需要列描述:
>>> cur.execute('select * from t')
>>> description = cur.description
>>> print description
(Column(name='record_timestamptz', type_code=1184, display_size=None, internal_size=8, precision=None, scale=None, null_ok=None),)
>>> columns = description[0]
>>> print columns.name, columns.type_code
record_timestamptz 1184
Run Code Online (Sandbox Code Playgroud)
对于数据类型名称缓存应用程序启动时的pg_type关系并使其成为字典:
cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cursor.execute ('select oid, * from pg_type')
pg_type = dict([(t['oid'], t['typname']) for t in cursor.fetchall()])
cursor.execute ('select * from t')
for t in cursor.description:
print t.name, t.type_code, pg_type[t.type_code]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6459 次 |
最近记录: |