gpt4 book ai didi

python - SQLalchemy "load_only"不只加载指定的列

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:39 25 4
gpt4 key购买 nike

我正在尝试使用 sqlalchemy 的 load_only 函数从表中选择列的子集。不幸的是,它似乎并不只返回函数调用中指定的列——具体来说,它似乎还获取了主键(在我的例子中,是一个 auto_increment id 字段)。

一个简单的例子,如果我使用这个语句来构建一个查询,:

query = session.query(table).options(load_only('col_1', 'col_2'))

然后 query.statement 看起来像这样:

SELECT "table".id, "table"."col_1", "table"."col_2" 
FROM "table"

这不是我所期望的 - 鉴于我已经指定了要使用的“唯一”列... id 来自哪里 - 有没有办法删除它?

最佳答案

如果查询完整的 ORM 实体,推迟主键是没有意义的,因为 an entity must have an identity so that a unique row can be identified in the database table .因此,尽管您有 load_only(),但查询包括主键。如果您只需要数据,您应该专门查询:

session.query(table.col1, table.col2).all()

结果是键控元组,在许多情况下您可以像对待实体一样对待它们。

实际上有一个 issue where having load_only() did remove the primary key from the select list , 它是 fixed in 0.9.5 :

[orm] [bug] Modified the behavior of orm.load_only() such that primary key columns are always added to the list of columns to be “undeferred”; otherwise, the ORM can’t load the row’s identity. Apparently, one can defer the mapped primary keys and the ORM will fail, that hasn’t been changed. But as load_only is essentially saying “defer all but X”, it’s more critical that PK cols not be part of this deferral.

关于python - SQLalchemy "load_only"不只加载指定的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54157389/

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