2011-03-25 71 views
1

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

举例来说,如果我的要求是

session.query(MyTable).all() 

我想生成的请求是这样:

SELECT * FROM Table WHERE specific_field = 'some_value'; 

是否有这样做不增加一个过滤器,每一种方式要求?

在此先感谢。

+0

见这个问题的答案:http://stackoverflow.com/问题/ 2885415 /什么,是最最好的方式,预过滤器用户访问换SQLAlchemy的查询 – 2011-03-29 08:44:09

回答

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() 
+0

没错,但其目的是有 filter_by(specified_field =“SOME_VALUE”)加入 自动 – chouquette 2011-03-25 14:52:54

+0

我想我会手动使用滤镜,但感谢这个想法! – chouquette 2011-03-25 16:32:09

+0

@chouquette:这听起来像是正确的决定。如果您经常使用某些类型的查询,您可以随后将它们放入函数中 - 我认为这是使用SQLAlchemy的查询构建方法的主要好处之一。 – phooji 2011-03-25 20:21:34

0

真的暗示这是它过于复杂,但...

CREATE VIEW Table2 AS SELECT * FROM Table WHERE specific_field = 'some_value'; 

则反映

table2 = sqlalchemy.Table('Table2', metadata, autoload=True) 

,只是查询有观点,有可能它映射(也提供了主键)来

class MyTable2(MyTable): 
    pass 

未经测试,但应该工作