在SQLAlchemy中的批量更新的where子句中添加多个条件

时间:2018-11-16 12:15:16

标签: python sqlalchemy where

下面的批量更新代码在benefits_dict是我的词典列表的情况下有效。

conn.execute(MedicalPlanBenefit.__table__.update()
                             .where(MedicalPlanBenefit.__table__.c.user_id == bindparam('user_id')),
                             benefits_dict)

现在,当我像下面那样在我的where子句中添加多个条件时,它将不起作用。

conn.execute(MedicalPlanBenefit.__table__.update()
                             .where(MedicalPlanBenefit.__table__.c.user_id == bindparam('user_id') & MedicalPlanBenefit.__table__.c.test_id == bindparam('test_id')),
                             benefits_dict)

在这种情况下如何添加多个条件?

我的benefits_dict

{'user_id': 1, 'email_address' : 'jack@yahoo.com', 'id':12, 'test_id': 31},
   {'user_id': 1, 'email_address' : 'jack@msn.com', 'id':13, 'test_id': 31},
   {'user_id': 2, 'email_address' : 'www@www.org', 'id':14, 'test_id': 31},
   {'user_id': 2, 'email_address' : 'wendy@aol.com', 'id':15, 'test_id': 31} 

1 个答案:

答案 0 :(得分:2)

您可以将where子句链接在一起,也可以使用and_运算符向where子句添加多个条件(请确保从and_导入sqlalchemy.sql运算符) 。参见Conjunctions in the SQLAlchemy Expression Language Tutorial。例如:

# Using and_ operator
where(
    and_(
        table.c.id == 'id',
        table.c.name == 'name'
        )
    )

# chaining where clauses
where(table.c.id == 'id').\
where(table.c.name == 'name')