如何使用 SQLAlchemy (v1.4) 将行作为未命名的元组获取

How to fetch rows as unnamed tuples with SQLAlchemy (v1.4)

我正在使用 SQLAlchemy 1.4,启用“未来模式”以增加与未来 SQLAlchemy 2.0 的兼容性(尽管根据 [=12= 启用的警告,我仍然没有启用 100% 兼容性) ] 环境变量).

现在我正在做这样的查询:

with self.__db_engine.connect() as conn:
    rs = conn.execute(
        get_jobs_df_query.where(jobs_cols.target_market_id == target_market_id)
    )
    rows = rs.fetchall()

rows 成为“字典”列表(尽管底层对象可能是其他对象),因此我可以使用字符串索引访问它的字段,如下所示:

row_0_field_x = rows[0]["x"]

这在大多数情况下都非常好,但我 need/want(对于某些特定情况)访问行时就好像它们是未命名的元组一样,而不关心每一列的名称。我的主要原因是性能,以及与其他库(如 numpy)更容易的互操作性,而无需引入太多胶水代码。

有什么简单的方法可以直接获取这样的无名元组吗?

感谢您的帮助。

如问题评论中所述,您的代码(engine.future=True)会将每一行 return 作为一个对象 (<class 'sqlalchemy.engine.row.Row'>),其行为类似于命名元组。然而,如果你真的需要一个简单的元组,你可以直接转换它:

with engine.begin() as conn:
    result = conn.execute(
        sa.text("SELECT 'Alfa' as foo, 'Bravo' as bar")
    ).fetchone()
    print(type(result))  # <class 'sqlalchemy.engine.row.Row'>
    result = tuple(result)
    print(type(result))  # <class 'tuple'>
    print(result)  # ('Alfa', 'Bravo')