python-使用**kwargs构造方法参数?
我试图在我的类中创建一个方法,该方法允许我使用任意大小的列集来过滤sqlachemy查询的结果。比如: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()方法中传递
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, ...)