什么相当于python'in'但是对于sqlalchemy

时间:2016-09-19 20:25:55

标签: python mysql list sqlalchemy

我有一个字典,用于查询数据库中的匹配项。我有一个单独的查询行不适合我。如果我有这样的列表:

user['names']= [Alice, Bob, John]

由于这是一个列表,我试图使用这样的东西:

 q.filter(UserTable.firstname in user['firstnames'])

但无论出于何种原因,这都行不通。但是,我知道Bob在数据库中。当我手动下拉所有查询时,我可以看到其中一行中有名称。如果我这样做:

q.filter(UserTable.firstname == user['firstnames'][1]) #Only does Bob

有效。当我手动提取所有查询时,将每行转换为字典,然后执行

row[#row_that_matches].firstname in user['names']

也有效。但由于某些原因,使用sqlalchemy中的“in”关键字无法按预期工作。有没有人知道可以对值列表中的某些内容进行sqlalchemy查询的替代方法?

1 个答案:

答案 0 :(得分:1)

使用in_() column method根据序列测试列:

q.filter(UserTable.firstname.in_(user['firstnames'])

请参阅对象关系教程的Common Filter Operations section

  

IN

query.filter(User.name.in_(['ed', 'wendy', 'jack']))

# works with query objects too:
query.filter(User.name.in_(
        session.query(User.name).filter(User.name.like('%ed%'))
))