我正在通过 python 对 MySQL 数据库执行 SQL“SELECT”查询,使用 PyMySQL 作为接口。以下是执行任务的代码摘录:
try:
with self.connection.cursor() as cursor:
sql = "SELECT `symbol`,`clordid`,`side`,`status` FROM " + tablename + " WHERE `tradedate` >= %s AND (`status` =%s OR `status`=%s)"
cursor.execute(sql,(str(begindate.date()),'I','T'))
a = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
查询执行得很好。问题是结果的列顺序与查询中指定的顺序不匹配。如果我运行添加以下代码:
for b in a:
print b.values()
Run Code Online (Sandbox Code Playgroud)
变量“b”中的值按以下顺序出现:
'status', 'symbol', 'side', 'clordid'
Run Code Online (Sandbox Code Playgroud)
此外,我指定的顺序无关紧要 - 结果总是按此顺序出现。有没有什么办法解决这一问题?提前致谢!
我确信您需要 collections.OrderedDict,因为每个表行都是一个字典,其中键保留在列中:
# python 2.7
import pymysql.cursors
from collections import OrderedDict
# ...
results = cursor.fetchall()
for i in results:
print OrderedDict(sorted(i.items(), key=lambda t: t[0]))
Run Code Online (Sandbox Code Playgroud)
另外,根据您的代码片段b.values()听起来像SQL ORDER BY col_name ASC|DESC. 在这种情况下,SQL 应该可以很好地工作。