我正在尝试在SQLalchimy中添加持久性SQL where子句。 基本上我有一个包含特定字段的表,我希望我的所有请求都添加一个where子句,所以这个字段匹配一个子句。
例如,如果我的请求是
session.query( MyTable ).all()
我希望生成的请求是这样的:
SELECT * FROM Table WHERE specific_field = 'some_value';
有没有办法在不为每个请求添加过滤器的情况下执行此操作?
提前致谢。
答案 0 :(得分:1)
如果你添加:
dbengine.echo = True
session.query(MyTable).filter_by(specified_field = 'some_value').all()
我不确定你的意思是:'没有为每个请求添加过滤器。'我的猜测是你不想过滤请求客户端。生成的SQL应该看起来很像你所要求的; dbengine.echo = True
位将显示生成的SQL。
根据OP评论进行更新:
如果你真的希望所有查询都有一个过滤器,那么简单(但在我看来不那么漂亮)的方法就是添加你自己的查询方法:
def myquery(self, table):
self.query(table).filter_by(specified_field = 'some_value')
session.__class__.some_arbitrarily_filtered_query = myquery
之后,你可以打电话(例如):
session.some_arbitrarily_filtered_query(MyTable).all()
答案 1 :(得分:0)
我不真的暗示这是因为它过于复杂,但是......
CREATE VIEW Table2 AS SELECT * FROM Table WHERE specific_field = 'some_value';
然后用
反映视图table2 = sqlalchemy.Table('Table2', metadata, autoload=True)
并在那里查询,可能将它(也提供主键)映射到
class MyTable2(MyTable):
pass
未经测试,但应该正常工作