2015-01-02 43 views
0

我想在我的类中创建一个方法,它可以让我使用任意大小的一组列来筛选sqlachemy查询的结果。喜欢的东西:python - 使用** kwargs构造方法参数?

def Find(self, **kwargs): 

    f = self.db_session.filter(kwargs).first() 

但是,.filter()方法需要在格式table_name.column_name == value参数。在这种情况下,表名总是固定的,并且我在kwargs字典中将column_name/value作为键/值对传入。

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

回答

1

filter()实际上需要位置参数。所述table_name.column_name == value表达返回一个对象(由于__eq__方法通过SQLAlchemy的超载),其代表了平等条件,并然后被传递到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, ...) 
0

的SQLAlchemy的查询对象已有一个filter_by()方法,该方法关键字参数,映射列名,他们必须等于值。

相关问题