Добавление нескольких условий в предложении where при массовом обновлении в sqlalchemy - PullRequest
0 голосов
/ 16 ноября 2018

Ниже работает код для массового обновления, где 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)

Как добавить несколько условий в этом случае?

My 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 голосов
/ 16 ноября 2018

Вы можете либо объединить предложения where вместе, либо использовать оператор and_, чтобы добавить несколько условий в предложение where (обязательно импортируйте оператор and_ из sqlalchemy.sql). См. Соединения в учебном руководстве по языку выражений SQLAlchemy . Например:

# 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')
...