如何解决从postgres获取结果并将其转换为python中的json
我必须从Postgres db获取输出,并在Postman发出请求时作为JSON发送输出 我的代码是
import psycopg2
conn = psycopg2.connect(host="localhost",port="5000",dbname="stores",password="*****",user="postgres")
cursor = conn.cursor()
def check():
db = conn.cursor()
db.execute("select * from store1 as name;")
dbop = db.fetchall()
jop = dict(dbop)
return jop
print(check())
我的数据库结构:
name | price
--------+-------
chair | 10.12
上面的python代码的输出是:
{'chair': 10.12}
但是我需要输出,
{
"name" : "chair","price" : 10.12
}
解决方法
根据http://zetcode.com/python/psycopg2/ fetchall()获取查询结果的所有(剩余)行,并将它们作为元组列表返回。
$ fetch_all.py
1 Audi 52642
2 Mercedes 57127
3 Skoda 9000
4 Volvo 29000
5 Bentley 350000
6 Citroen 21000
7 Hummer 41400
8 Volkswagen 21600
您可以自己进行映射(通过在源代码中显式命名列来创建元组中的词典列表),也可以使用字典光标(来自上述教程的示例):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import psycopg2
import psycopg2.extras
con = psycopg2.connect(database='testdb',user='postgres',password='s$cret')
with con:
cursor = con.cursor(cursor_factory=psycopg2.extras.DictCursor) # <-- notice the factory
cursor.execute("SELECT * FROM cars")
rows = cursor.fetchall()
for row in rows:
print(f"{row['id']} {row['name']} {row['price']}")
,
我没有关于dbop
变量数据类型的足够信息,因此您可以像这样使用Adapter Design Pattern:
import psycopg2
conn = psycopg2.connect(host="localhost",port="5000",dbname="stores",password="*****",user="postgres")
cursor = conn.cursor()
def checkAdapter(queryResult):
name = list(queryResult)[0]
return {
"name": name,"price": queryResult[name]
}
def check():
db = conn.cursor()
db.execute("select * from store1 as name;")
dbop = db.fetchall()
jop = dict(dbop)
return checkAdapter(jop)
print(check())
修改
正如Marek Piotrowskim所说,有更有效的解决方案,我强烈建议您实施它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。