我有一个由SQL查询排序结果构建的字典,在jsonify()这个结果用于输出之前,它显示了在控制台打印时(按我想要的顺序,按num键排序):
{“贸易”:{“num”:0,“交易”:1,“类型”:“输入长”,“信号”:“长”,“日期”:“2017-01-31”,“价格”:928.5,“合同”:109.1395},{“num”:1,“贸易”:1,“类型”:“退出长”,“信号”:“短”,“日期”:“2017-03-10”,“价格”:1005.0,“合同”:109.1395},{“num”:2,“交易”:2,“类型”:“条目短”,“信号”:“短期”,“日期”:“2017-03-10”,“价格”:1005.0,“合同”:84.0427},{“num”:3,“交易”:2,“类型”:“退出空”,“信号”:“关闭入口指令空头”,“日期”:“2017-03-19”,“价格”:970.0,“合约”:84.0427}
之后,除了返回jsonify(结果)之外,我什么也不做,但是当我在REST上运行查询时,输出如下所示:
{“贸易名录”:{“合同”:109.1395,“日期”:“2017-01-31”,"num":0,“价格”:928.5,“信号”:“长”,“贸易”:1,“类型”:“进入长”},{“合同”:109.1395,“日期”:“2017-03-10”,"num":1,“价格”:1005.0,“信号”:“空”,“交易”:1,“类型”:“退出长”},{“合同”:84.0427,“日期”:“2017-03-10”,"num":2,“价格”:1005.0,“信号”:“空”,“交易”:2,“类型”:“输入空头”},{“合同”:84.0427,“日期”:“2017-03-19”,“价格”:3,“价格”:970.0,“信号”:“关闭入口指令空头”,“交易”:2,“类型”:“退出空”}}
因此,似乎Jsonify出于某种原因扰乱了顺序,并对键进行了字母排序,对于我如何防止这种情况发生,有什么建议吗?
sql = "SELECT num, trade, type, signal, date, price, contracts from tradelist ORDER BY num"
query = conn.execute(sql)
result = {'tradelist': [dict(zip(tuple (query.keys()), row)) for row in query.cursor]}
print(result)
return jsonify(result)发布于 2019-07-26 15:09:54
如果您注意到,在您的输出中,键是按字母顺序排列的。可能有两个原因。(1) python词典不能保证具有相同的顺序(按添加的顺序)。如果希望保留顺序,则可能需要使用OrderedDict。(2) query.keys()的元组已经以其内部有序的方式进入python,这就是输出存在的原因。
假设这里的条件1为真,我已经将您的代码做了很小的修改,如下所示。
from collections import OrderedDict
sql = "SELECT num, trade, type, signal, date, price, contracts from tradelist ORDER BY num"
query = conn.execute(sql)
result = {'tradelist': [OrderedDict(zip(tuple (query.keys()), row)) for row in query.cursor]}
print(result)
return jsonify(result)如果这对你有用的话,请告诉我。我很好奇,在这种情况下,条件1是对的还是条件2。谢谢。
https://stackoverflow.com/questions/57222228
复制相似问题