我试图在我的类中创建一个方法,它允许我使用任意大小的列集来过滤sqlachemy查询的结果。类似的东西:
def Find(self, **kwargs):
f = self.db_session.filter(kwargs).first()
但是,.filter()
方法需要格式为table_name.column_name == value
的参数。在这种情况下,表名始终是固定的,并且我将column_name / value作为kwargs
字典中的键/值对传递。
我有没有办法在Find()
方法中操纵通过的字典,以正确的格式输入filter()
的参数?
答案 0 :(得分:1)
filter()
实际上需要位置参数。 table_name.column_name == value
表达式返回一个对象(由于sqlalchemy的__eq__
方法重载),它表示相等条件,然后传递给filter()
而没有关键字参数名称(请注意在您正常传递的参数中缺少任何单 =
。
因此,您可以使用Find(self, *args)
然后调用.filter(*args)
,然后您就可以调用Find
来调用filter()
。
def Find(self, **kwargs):
f = self.db_session.filter(kwargs).first()
#...
# invoke as foo.Find(table_name.column_name == value, ...)
答案 1 :(得分:0)
SQLAlchemy的查询对象已经有一个filter_by()
方法,该方法接受关键字参数,将列名映射到它们必须等于的值。