View SQLAlchemy:选择时用视图替换表

View SQLAlchemy:选择时用视图替换表,view,sqlalchemy,View,Sqlalchemy,我有一个普通的选择: e = session.query(MyTable).filter(MyTable.pk=='abc').all() 其中MyTable映射到数据库中的my_table 我还在数据库中创建了一个派生视图my_view,该视图的命名列与my_表的命名列完全相同 是否有一种方法可以在查询时用my\u视图替换my\u表,以便从视图中返回行?显然,生成的对象需要是只读的-我不打算更改它们 所以基本上我希望SQL是 FROM my_view AS my_table 而不是 FRO

我有一个普通的选择:

e = session.query(MyTable).filter(MyTable.pk=='abc').all()
其中MyTable映射到数据库中的my_table

我还在数据库中创建了一个派生视图
my_view
,该视图的命名列与my_表的命名列完全相同

是否有一种方法可以在查询时用
my\u视图
替换
my\u表
,以便从视图中返回行?显然,生成的对象需要是只读的-我不打算更改它们

所以基本上我希望SQL是

FROM my_view AS my_table
而不是

FROM my_table
查询中的所有其他内容都相同

我不想再创建另一个映射器,除非它可以自动完成,因为MyView和MyTable有60多列


更新:似乎是我需要的,但在本例中,它只是添加到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';"
但以下只有一个来自实体:

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';"

进一步的挖掘让我更接近答案,但毫无乐趣。在此处发布进度,以防引起进一步思考:

from sqlalchemy.orm.util import aliased
session.query(MyTable).select_entity_from(
    select([aliased(MyTable, alias=v, adapt_on_names=True)])).\
filter(MyTable.pk=='abc')

adapt\u on\u names
似乎是我所需要的,我已经仔细检查了视图是否具有与表完全相同的列名,但上面仍然生成了两个
froms

文件,我认为这是一个bug:

最后的答复是:

session.query(MyTable).select_entity_from(
     text('SELECT * FROM my_view').columns(*MyTable.__table__.columns)).\
filter(MyTable.pk=='abc')