在 SQLAlchemy 中检索查询结果作为 dict

阿尔西乌菲

我正在使用 Flask SQLAlchemy,我有以下代码从 MySQL 数据库中使用原始 SQL 查询从数据库中获取用户:

connection = engine.raw_connection()
cursor = connection.cursor()
cursor.execute("SELECT * from User where id=0")
results = cursor.fetchall()

results变量是一个元组,我希望它是 dict() 类型。有没有办法实现这一目标?

当我使用 pymysql 构建数据库连接时,我能够做到

cursor = connection.cursor(pymysql.cursors.DictCursor)

SQLAlchemy 中是否有类似的东西?

注意:我想要做这个改变的原因是为了摆脱在我的代码中使用 pymysql,而只使用 SQLAlcehmy 功能,即我不想在我的代码中的任何地方使用 ´´´import pymysql´´´。

戈德·汤普森

结果是一个元组,我希望它是 dict() 类型

SQLAlchemy 1.4 的更新答案:

1.4 版已弃用旧engine.execute()模式并更改了.execute()内部操作方式.execute()现在返回一个带有.mappings()方法CursorResult对象

import sqlalchemy as sa

# …

with engine.begin() as conn:
    qry = sa.text("SELECT FirstName, LastName FROM clients WHERE ID < 3")
    resultset = conn.execute(qry)
    results_as_dict = resultset.mappings().all()
    pprint(results_as_dict)
    """
    [{'FirstName': 'Gord', 'LastName': 'Thompson'}, 
     {'FirstName': 'Bob', 'LastName': 'Loblaw'}]
    """

(SQLAlchemy 1.3 的先前答案)

如果您使用SQLAlchemy已经这样做了你engine.execute,而不是raw_connection()随着engine.executefetchone会返回一个SQLAlchemy的Row对象,fetchall将返回listRow对象。Row对象可以通过键访问,就像一个dict

sql = "SELECT FirstName, LastName FROM clients WHERE ID = 1"
result = engine.execute(sql).fetchone()
print(type(result))  # <class 'sqlalchemy.engine.result.Row'>
print(result['FirstName'])  # Gord

如果你需要一个真正的dict对象,那么你可以转换它:

my_dict = dict(result)
print(my_dict)  # {'FirstName': 'Gord', 'LastName': 'Thompson'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章