【发布时间】:2017-03-09 17:13:00
【问题描述】:
我有一个正常的选择:
e = session.query(MyTable).filter(MyTable.pk=='abc').all()
MyTable 映射到 db 中的my_table。
我还在数据库中创建了一个派生视图my_view,它与 my_table 具有完全相同的命名列。
有没有办法在查询时用my_view 替换my_table,以便我从视图中取回行?显然,生成的对象需要是只读的——我不打算改变它们。
所以基本上我希望 SQL 是
FROM my_view AS my_table
而不是
FROM my_table
查询中的其他所有内容都相同。
我不想创建另一个映射器,除非它可以以某种方式自动完成,因为 MyView 有 60 多列与 MyTable 相同。
更新:select_entity_from 似乎是我需要的,但在这种情况下,它只是添加到 FROM 表中,而不是替换:
v = Table('my_view', metadata, autoload=True)
print session.query(MyTable).select_entity_from(v).filter(MyTable.pk=='abc')
"SELECT ... FROM my_table, my_view WHERE my_table.pk = 'abc';"
但以下只有一个 FROM 实体:
print session.query(MyTable).\
select_entity_from(select([MyTable])).\
filter(MyTable.pk=='abc')
"SELECT ... FROM (SELECT ... FROM my_tabl) AS anon_1 WHERE anon_1.pk = 'abc';"
【问题讨论】:
标签: view sqlalchemy