sqlalchemy multiple filter_by展开订单

时间:2016-11-28 12:28:15

标签: python orm sqlalchemy

我在sqlalchemy中使用filter_by语句,如下所示:

all_animals = self.session.query(Animals).filter_by(
            food=self.food,
            continent=self.continent,
            planet=self.planet).all()

为了有效地使用多列索引,我想确定在生成的SQL中应用这些过滤器的顺序。从经验测试看来,上述查询将导致:

SELECT * FROM ANIMALS WHERE planet = ? and continent = ? and food = ?

我正在尝试找到某种可以确认此订单的文件。

我用sqlalchemy这种方式,因为来自django ORM,这样做很自然。我试图在documentation中找到这种语法,但是看起来这是一个未记录的功能。

我在源代码中找到了它:

orm / query.py第1511行

def filter_by(self, **kwargs):
    clauses = [_entity_descriptor(self._joinpoint_zero(), key) == value
               for key, value in kwargs.items()]
    return self.filter(sql.and_(*clauses))

它们似乎只是解压缩到sql.and_运算符中。任何人都可以确认生成的SQL查询的顺序是反向的kwargs顺序吗?

0 个答案:

没有答案