持久where where子句SQLAlchemy

时间:2011-03-25 14:38:51

标签: python mysql sqlalchemy

我正在尝试在SQLalchimy中添加持久性SQL where子句。 基本上我有一个包含特定字段的表,我希望我的所有请求都添加一个where子句,所以这个字段匹配一个子句。

例如,如果我的请求是

session.query( MyTable ).all()

我希望生成的请求是这样的:

SELECT * FROM Table WHERE specific_field = 'some_value';

有没有办法在不为每个请求添加过滤器的情况下执行此操作?

提前致谢。

2 个答案:

答案 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

未经测试,但应该正常工作