将sql表数据转换为json
Posted
技术标签:
【中文标题】将sql表数据转换为json【英文标题】:Converting sql table data to json 【发布时间】:2017-04-01 22:47:45 【问题描述】:我在服务器端使用烧瓶,我有以下 api:
class DateTimeEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, datetime):
return o.isoformat()
return json.JSONEncoder.default(self, o)
@app.route('/getTransaction', methods=['GET','POST'])
def getTransaction():
uid = request.form["uid"]
db = my.connect("somehost.com","someuser","somepwd","someDB")
cur = db.cursor()
cur.execute("select * from Transactions where uid='%s'" %(uid))
json_string = json.dumps(cur.fetchall(),cls=DateTimeEncoder)
db.close()
return json.dumps(json_string)
在此之后我得到的响应为:
http://sairav.pythonanywhere.com/getTransaction
有没有办法我可以用键(例如名称、描述、数量、类型、id、您可以在响应中看到的值的时间)将这些数据转换为 json 格式
json 数组中的必需格式:
"data":[
"Name":"John", "desc":"Doe","amount":"123.0","type":"credit","uid":"213","time":"12-11-2016 12:23:22",
"Name":"John2", "desc":"Doe","amount":"1234.0","type":"credit","uid":"213","time":"12-11-2016 12:23:22",
"Name":"John3", "desc":"Doe","amount":"1235.0","type":"credit","uid":"213","time":"12-11-2016 12:23:22",
]
【问题讨论】:
默认游标是行游标,即它发送["john", "doe", "123.0", "credit"]
。您可以创建一个dictcursor
,它将作为字典发出行。否则,您可以像在this so answer 中一样访问cursor.description
并使用字段名称压缩行。一旦你有了它,你就可以继续使用 json.dumps
【参考方案1】:
在这里发现真的很有帮助answer 完全解决了我的目的,它将我的表列名设置为 json 数组中 json 对象的键。 感谢 algrebe 提供的链接。
具有所需 json 输出的运行代码是:
@app.route('/getTransaction', methods=['GET','POST'])
def getTransaction():
uid = request.form["uid"]
db = my.connect("somehost.com","someuser","somepwd","someDB")
cur = db.cursor()
cur.execute("select * from Transactions where uid='%s'" %(uid))
**columns = cur.description
result = [columns[index][0]:column for index, column in enumerate(value) for value in cur.fetchall()]**
db.close()
**return json.dumps(result,cls=DateTimeEncoder)**
【讨论】:
以上是关于将sql表数据转换为json的主要内容,如果未能解决你的问题,请参考以下文章