gpt4 book ai didi

python-2.7 - 从 SQLAlchemy 子查询中选择整个实体

转载 作者:行者123 更新时间:2023-12-05 01:02:58 25 4
gpt4 key购买 nike

如果我在 SQLAlchemy 查询中指定映射类(~= 数据库表),则返回的行将包含这些类的实例:

q = sess.query(table1, table2, table3.string_column)
q.first()
==> ( <instance of table1>,
<instance of table2>,
'string' )

但是,如果我从子查询中选择,则返回的行包含单个列而不是类实例:
q = sess.query(table1, table2, table3.string_column)

q2 = sess.query( q.subquery() )
q2.first()
==> ( col1_of_table1, col2_of_table1, ...,
col2_of_table2, col2_of_table2, ...,
'string' )

有没有办法指定我要将子查询中的行保留为映射类的实例?

如果不加入映射类的新实例,我无法弄清楚如何做到这一点。 corresponding_column 方法让我引用具体 栏目 从子查询中,但我不知道如何从子查询中引用完整的实体。我试过玩 select_from 但它没有给我正确的行为。

有什么建议?

最佳答案

返回实体的查询总是需要被告知这些实体——这就是它想要“选择”的东西。行的来源是它想要选择的“from”。两件不同的事情。

所以给出:

q = sess.query(table1, table2, table3.string_column)
q = q.subquery()

一旦你调用 subquery(),查询的 ORM 特性几乎消失了,它只是一个 SELECT 对象。要从中选择实体,您必须再次命名它们,并使用 select_entity_from (如果您实际上使用的是 0.7,则是当时的 select_from() ;您需要具体说明“不是正确的行为):
q2 = sess.query(table1, table2, table3.string_column).select_entity_from(q)

关于python-2.7 - 从 SQLAlchemy 子查询中选择整个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435457/

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