我正在使用Python2.7和PostgreSQL9.1。为了从查询中获取字典,我尝试了下面描述的代码:PostgreSQL
import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=mydb host=localhost user=user password=password")
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute ("select * from port")
type(cur.fetchall())
它正在打印下一个答案:
<type 'list'>
打印项目本身,向我显示它是列表。例外的答案是字典。
编辑:
尝试下一个:
ans = cur.fetchall()[0]
print ans
print type(ans)
返回
[288, 'T', 51, 1, 1, '192.168.39.188']
<type 'list'>
发布于 2020-10-27 12:50:45
如果不想使用psycopg2.extras.DictCursor
,可以使用cursor.description
为结果创建字典列表
# connect
connection = psycopg2.connect()
cursor = connection.cursor()
# query
cursor.execute("SELECT * FROM myTable")
# transform result
columns = list(cursor.description)
result = cursor.fetchall()
# make dict
results = []
for row in result:
row_dict = {}
for i, col in enumerate(columns):
row_dict[col.name] = row[i]
results.append(row_dict)
# display
print(result)
我相当经常地使用以下函数:
def select_query_dict(connection, query, data=[]):
"""
Run generic select query on db, returns a list of dictionaries
"""
logger.debug('Running query: {}'.format(query))
# Open a cursor to perform database operations
cursor = connection.cursor()
logging.debug('Db connection succesful')
# execute the query
try:
logger.info('Running query.')
if len(data):
cursor.execute(query, data)
else:
cursor.execute(query)
columns = list(cursor.description)
result = cursor.fetchall()
logging.debug('Query executed succesfully')
except (Exception, psycopg2.DatabaseError) as e:
logging.error(e)
cursor.close()
exit(1)
cursor.close()
# make dict
results = []
for row in result:
row_dict = {}
for i, col in enumerate(columns):
row_dict[col.name] = row[i]
results.append(row_dict)
return results
发布于 2014-01-16 10:05:40
有很多安德烈·肖钦,
完整的答案是:
#!/var/bin/python
import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=uniart4_pr host=localhost user=user password=password")
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute ("select * from port")
ans =cur.fetchall()
ans1 = []
for row in ans:
ans1.append(dict(row))
print ans1 #actually it's return
发布于 2014-01-16 09:40:12
这是正常的:当您调用.fetchall()
方法时,返回元组列表。但如果你写
type(cur.fetchone())
它将只返回一个类型为:
<class 'psycopg2.extras.DictRow'>
在此之后,您可以使用它作为列表或类似字典:
cur.execute('SELECT id, msg FROM table;')
rec = cur.fetchone()
print rec[0], rec['msg']
您还可以使用简单的游标迭代器:
res = [json.dumps(dict(record)) for record in cursor] # it calls .fetchone() in loop
https://stackoverflow.com/questions/21158033
复制相似问题