Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 持久炼金术_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python 持久炼金术

Python 持久炼金术,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我试图在SQLalchimy中添加一个持久的SQLWHERE子句。 基本上,我有一个包含特定字段的表,我希望我的所有请求都添加一个where子句,以便该字段匹配一个子句 例如,如果我的请求是 session.query( MyTable ).all() 我希望生成的请求如下所示: SELECT * FROM Table WHERE specific_field = 'some_value'; 有没有一种方法可以在不向每个请求添加筛选器的情况下执行此操作 提前感谢。如果您添加: dbengin

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

例如,如果我的请求是

session.query( MyTable ).all()
我希望生成的请求如下所示:

SELECT * FROM Table WHERE specific_field = 'some_value';
有没有一种方法可以在不向每个请求添加筛选器的情况下执行此操作

提前感谢。

如果您添加:

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
之后,您可以打电话(例如):

如果您添加:

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
之后,您可以打电话(例如):

我不是真的建议这个,因为它太复杂了,但是

CREATE VIEW Table2 AS SELECT * FROM Table WHERE specific_field = 'some_value';
然后,您可以使用

table2 = sqlalchemy.Table('Table2', metadata, autoload=True)
然后在那里查询,可能会将它(也提供主键)映射到

未经测试,但应该有效

我不是真的建议这样做,因为它太复杂了,但是

CREATE VIEW Table2 AS SELECT * FROM Table WHERE specific_field = 'some_value';
然后,您可以使用

table2 = sqlalchemy.Table('Table2', metadata, autoload=True)
然后在那里查询,可能会将它(也提供主键)映射到


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

是的,但目标是自动添加过滤器(指定的字段='some_value')。我想我将手动使用过滤器,但感谢您的想法@周奎特:听起来是个正确的决定。如果您经常使用某些类型的查询,您可以在以后将它们放入函数中--我认为这是使用SQLAlchemy的查询构造方法的主要好处之一。是的,但目的是自动添加筛选器(specified_field='some_value')。我想我将手动使用筛选器,但是谢谢你的主意@周奎特:听起来是个正确的决定。如果您经常使用某些类型的查询,您可以在以后将它们放入函数中--我认为这是使用SQLAlchemy的查询构造方法的主要好处之一。请参阅此问题的答案:请参阅此问题的答案: