gpt4 book ai didi

python - 无法让 MySQL Connector/Python 返回字典

转载 作者:行者123 更新时间:2023-11-29 18:29:33 30 4
gpt4 key购买 nike

我有一个 Python 应用程序,在其中我从我的角度调用 MySQL 存储过程,如下所示:

import mysql.connector
proc = 'audit_report'
parms = [data['schoolid'], dateToISO(data['startdatedefault'],'from'), dateToISO(data['enddatedefault'],'to'), joinIntList(data['studypgms'], joinWith), joinIntList(data['fedpgms'], joinWith), joinIntList(data['statuses'], joinWith), data['fullssndefault']]
conn = mysql.connector.connect(user='usr', database='db', password='pwd')
cursor = conn.cursor(dictionary=True)
cursor.callproc(proc, parms)
for result in cursor.stored_results():
print(result.fetchall())

我得到的数据以元组列表的形式返回,即标准输出。由于我使用的是连接器版本 2.1.7,文档说添加

dictionary=True

到游标声明应导致行集作为字典列表返回,其中列名作为每个字典的键。我的应用程序和文档中的示例之间的主要区别是我使用的是cursor.callproc(),而示例使用cursor.execute() 和实际的sql 代码。

我试过了

print(cursor.column_names)

看看我是否可以通过这种方式获取列名,但我得到的只是

('@_audit_report_arg1', '@_audit_report_arg2', '@_audit_report_arg3', '@_audit_report_arg4', '@_audit_report_arg5', '@_audit_report_arg6', '@_audit_report_arg7')

它看起来更像是存储过程的输入参数。

有没有办法真正获取返回数据的列名?该过程有些复杂,包含交叉表类型的操作,但从 MySQL Workbench 调用相同的存储过程可以很好地提供列名称。

通常,知道输出应该是什么,我可以对列名称进行硬编码,但此过程交叉表最后几列的数据,并且在查询运行之前无法预测它们将是什么。谢谢...

最佳答案

你可以在 python3 中使用 pymysql 并且它应该可以正常工作!!

import pymysql.cursors
connection = pymysql.connect(host='',
user='',
password='',
db='test',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)

try:
with connection.cursor() as cursor:
# Read a single record
sql = "query"
cursor.execute(sql)
result = cursor.fetchone()
num_fields = len(cursor.description)
field_names = [i[0] for i in cursor.description]
print (field_names)
finally:
connection.close()

关于python - 无法让 MySQL Connector/Python 返回字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45827329/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com