如果我在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
,但它没有给我正确的行为。
有什么建议吗?
答案 0 :(得分:3)
返回实体的查询总是需要被告知这些实体 - 这就是它想要“选择”的东西。行的来源是它想要“从”选择的内容。两件事。
所以给出:
q = sess.query(table1, table2, table3.string_column)
q = q.subquery()
一旦调用了subquery(),查询的ORM-ness大部分都消失了,它只是一个SELECT对象。要从中选择实体,你必须再次命名它们,并使用select_entity_from(如果你实际上是0.7,那么select_from()就是那个;你需要具体说明“不正确的行为”:< / p>
q2 = sess.query(table1, table2, table3.string_column).select_entity_from(q)
答案 1 :(得分:0)
根据Selecting Entities from Subqueries,您可以使用关键字aliased()