我在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中找到这种语法,但是看起来这是一个未记录的功能。
我在源代码中找到了它:
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
顺序吗?