Dan*_*ski 7 sqlalchemy python-2.7
如果我在 SQLAlchemy 查询中指定映射类(~= 数据库表),则返回的行将包含这些类的实例:
q = sess.query(table1, table2, table3.string_column)
q.first()
==> ( <instance of table1>,
<instance of table2>,
'string' )
Run Code Online (Sandbox Code Playgroud)
但是,如果我从子查询中选择,则返回的行包含单个列而不是类实例:
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' )
Run Code Online (Sandbox Code Playgroud)
有没有办法指定我要将子查询中的行保留为映射类的实例?
如果不加入映射类的新实例,我无法弄清楚如何做到这一点。该corresponding_column方法允许我从子查询中引用特定的列,但我无法弄清楚如何从子查询中引用完整的实体。我试过玩,select_from但它没有给我正确的行为。
有什么建议?
返回实体的查询总是需要被告知这些实体——这就是它想要“选择”的东西。行的来源是它想要选择的“from”。两件不同的事情。
所以给出:
q = sess.query(table1, table2, table3.string_column)
q = q.subquery()
Run Code Online (Sandbox Code Playgroud)
一旦你调用 subquery(),查询的 ORM 特性几乎消失了,它只是一个 SELECT 对象。要从中选择实体,您必须再次命名它们,并使用 select_entity_from (如果您实际上使用的是 0.7,则是当时的 select_from() ;您需要具体说明“不是正确的行为):
q2 = sess.query(table1, table2, table3.string_column).select_entity_from(q)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |