使用sqlalchemy序列化为字典存储过程结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用sqlalchemy序列化为字典存储过程结果相关的知识,希望对你有一定的参考价值。
我在mysql数据库中存储过程并使用sqlalchemy来获取结果。
connection = db.engine.raw_connection()
cursor = connection.cursor()
cursor.callproc('catalog_get_products_on_catalog', [2000, 10, 0])
results = cursor.fetchall()
cursor.close()
print(results)
我得到结果作为元组:
(10, 'abcd')
对于正常的sqlalchemy结果,可以使用marshmallow将结果序列化为字典,是否可以通过在marshmallow中定义模式将元组转换为字典?
答案
Marshmallow目前似乎没有这种功能,以下替代工作:
data = db.session.execute(sqlalchemy.text("CALL catalog_get_products_on_catalog(:inShortProductDescriptionLength, :inProductsPerPage, :inStartItem)"),
{'inShortProductDescriptionLength':20, 'inProductsPerPage':10, 'inStartItem':0}).fetchall()
results = []
for row_number, row in enumerate(data):
results.append({})
for column_number, value in enumerate(row):
results[row_number][row.keys()[column_number]] = value
更新:可以简单地完成,
results = [dict(row) for row in data]
要么
results = [*map(dict,data)]
以上是关于使用sqlalchemy序列化为字典存储过程结果的主要内容,如果未能解决你的问题,请参考以下文章
Newtonsoft Json 将字典反序列化为来自 DataContractJsonSerializer 的键/值列表