Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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-使用**kwargs构造方法参数?_Python_Sqlalchemy - Fatal编程技术网

python-使用**kwargs构造方法参数?

python-使用**kwargs构造方法参数?,python,sqlalchemy,Python,Sqlalchemy,我试图在我的类中创建一个方法,该方法允许我使用任意大小的列集来过滤sqlachemy查询的结果。比如: def Find(self, **kwargs): f = self.db_session.filter(kwargs).first() 但是,.filter()方法要求参数的格式为table\u name.column\u name==value。在这种情况下,表名总是固定的,我在kwargs字典中作为键/值对传入列名称/值 是否有一种方法我看不到,可以操纵Find()方法中传递

我试图在我的类中创建一个方法,该方法允许我使用任意大小的列集来过滤sqlachemy查询的结果。比如:

def Find(self, **kwargs):

    f = self.db_session.filter(kwargs).first()
但是,
.filter()
方法要求参数的格式为
table\u name.column\u name==value
。在这种情况下,表名总是固定的,我在
kwargs
字典中作为键/值对传入列名称/值

是否有一种方法我看不到,可以操纵
Find()
方法中传递的字典,以正确的格式将参数输入到
filter()
中?

filter()
实际上使用位置参数。
table\u name.column\u name==value
表达式返回一个表示相等条件的对象(由于sqlalchemy重载了
\uuu eq\uu
方法),然后在不使用关键字参数名称的情况下传递给
filter()
(请注意,正常传递的参数中没有任何单个的
=

因此,您可以使用
Find(self,*args)
然后调用
.filter(*args)
,这样您就可以调用
Find
了,只需调用
filter()


SQLAlchemy的查询对象已经有了一个
filter\u by()
方法,该方法接受关键字参数,将列名映射到它们必须等于的值

def Find(self, **kwargs):
    f = self.db_session.filter(kwargs).first()
    #...


# invoke as foo.Find(table_name.column_name == value, ...)