我正在尝试使用 sqlalchemyload_only函数从表中选择列的子集。不幸的是,它似乎不仅仅返回函数调用中指定的列 - 具体来说,它似乎还获取主键(在我的例子中,是一个 auto_increment id 字段)。
一个简单的例子,如果我使用这个语句来构建一个查询,:
query = session.query(table).options(load_only('col_1', 'col_2'))
Run Code Online (Sandbox Code Playgroud)
然后query.statement看起来像这样:
SELECT "table".id, "table"."col_1", "table"."col_2"
FROM "table"
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的 - 鉴于我已经指定了要使用的“唯一”列...它们来自哪里id- 有没有办法删除它?
如果查询完整的 ORM 实体,推迟主键是没有意义的,因为实体必须具有标识,以便可以在数据库表中标识唯一的行。因此,尽管您有load_only(). 如果您只需要数据,则应该专门查询:
session.query(table.col1, table.col2).all()\nRun Code Online (Sandbox Code Playgroud)\n\n结果是带键的元组,在许多情况下您可以像对待实体一样对待它们。
\n\n实际上存在一个问题,即load_only()从选择列表中删除了主键,并且在 0.9.5 中已修复:
\n\n[orm] [bug]修改了行为
\norm.load_only(),使得主键列始终添加到列列表中为 \xe2\x80\x9cundeferred\xe2\x80\x9d;否则,ORM 无法加载行 xe2x80x99 的标识。显然,可以推迟映射的主键,ORM 将失败,这还没有改变。但由于 load_only 本质上是说 \xe2\x80\x9c 推迟除 X\xe2\x80\x9d 之外的所有内容,因此 \xe2\x80\x99 更重要的是 PK cols 不属于此延迟。
| 归档时间: |
|
| 查看次数: |
4209 次 |
| 最近记录: |