Mysql-Python-Connector从存储过程中的select语句中获取列名

qlckcl4x  于 2023-08-02  发布在  Mysql
关注(0)|答案(2)|浏览(109)

我有一个存储过程,它包含多个语句,简化如下

create temp table...; 
update temp table...; 
....
select * from temp table; #last statement

字符串
我有下面的Python代码来从SP获取返回结果。我需要列的名称,以便我可以转换成JSON格式的结果。但是,cursor.description返回的内容并不是我所期望的。请指示!!Mysql5.7,mysql-python-connector 2.x by Oracle,python 3.5

cursor.callproc(proc, args)
columns = cursor.description
print(columns) #returns [('@_sp_get_toc_arg1', 8, None, None, None, None, 1, 128)]

for result in cursor.stored_results():
    return result.fetchall()

insrf1ej

insrf1ej1#

cursor.stored_results()返回的迭代器产生游标,你需要检查这些游标的描述来获得列名,而不是初始游标:

for result in cursor.stored_results():
    print(result.description)
    return result.fetchall()

字符串

lymnna71

lymnna712#

当需要JSON格式时,最好的方法是使用类似字典的游标:

dict_cursor = connection.cursor(dictionary=True)
dict_cursor.callproc("proc")
results = next(dict_cursor.stored_results()).fetchall()

字符串

  • results* 变量是一个列表,其中包含了每个检索到的记录的对象,其中列名为[{column_name: first_row_value, ...}, {column_name: second_row_value, ...}, ...],因此可以迭代:
for result in results:
    print(result)

如果字典式光标不适合您的需要,您可以这样做:

for column_id in cursor.stored_results():
    columns = [column[0] for column in column_id.description]
print(columns)

相关问题