Sqlalchemy查询:使用元组列表进行选择

时间:2015-09-15 10:58:55

标签: python mysql sqlalchemy

所以我有一个像[('Alex', 20), ('Steve', 50)]

这样的元组列表

现在我需要在Users表上触发一个select查询以获取匹配的记录。

我尝试过: -

users = [('Alex', 20), ('Steve', 50)]
names = [r[0] for r in users]
ages = [r[1] for r in users]

query = self.session.query(Users).filter(
                      and_(Users.name.in_(names),
                      Users.age.in_(ages)))

我想要Alex年龄为20的用户和年龄为Steve的{​​{1}}用户的记录,但此查询还会向我50用户提供年龄Alex

所以这个查询并没有真正解决。需要一些帮助来搞清楚这个问题。

1 个答案:

答案 0 :(得分:2)

要仅获取名称和年龄与您的users列表匹配的用户,您必须将nameage过滤条件与AND条款合并,并将其加入OR条款。 例如。像这样:

user_filters = [and_(Users.name == name, Users.age == age)
                for name, age in users]
self.session.query(Users).filter(or_(*user_filters))