使用 PyMySQL 选择列顺序错误的结果

bsa*_*sam 5 python mysql

我正在通过 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)

此外,我指定的顺序无关紧要 - 结果总是按此顺序出现。有没有什么办法解决这一问题?提前致谢!

fel*_*ins 2

我确信您需要 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 应该可以很好地工作。