我已经设法在SQLAlchemy中使用批量插入,例如:
conn.execute(addresses.insert(), [ {'user_id': 1, 'email_address' : 'jack@yahoo.com'}, {'user_id': 1, 'email_address' : 'jack@msn.com'}, {'user_id': 2, 'email_address' : 'www@www.org'}, {'user_id': 2, 'email_address' : 'wendy@aol.com'}, ])
我现在需要的是等效的更新。我已经试过了:
conn.execute(addresses.insert(), [ {'user_id': 1, 'email_address' : 'jack@yahoo.com', 'id':12}, {'user_id': 1, 'email_address' : 'jack@msn.com', 'id':13}, {'user_id': 2, 'email_address' : 'www@www.org', 'id':14}, {'user_id': 2, 'email_address' : 'wendy@aol.com', 'id':15}, ])
期望每一行都根据“ id”字段进行更新,但是它不起作用。我以为是因为我没有指定WHERE子句,但是我不知道如何使用字典中包含的数据指定WHERE子句。
有人可以帮我吗?
阅读文档的“插入,更新和删除”部分。以下代码将帮助您入门:
from sqlalchemy.sql.expression import bindparam stmt = addresses.update().\ where(addresses.c.id == bindparam('_id')).\ values({ 'user_id': bindparam('user_id'), 'email_address': bindparam('email_address'), }) conn.execute(stmt, [ {'user_id': 1, 'email_address' : 'jack@yahoo.com', '_id':1}, {'user_id': 1, 'email_address' : 'jack@msn.com', '_id':2}, {'user_id': 2, 'email_address' : 'www@www.org', '_id':3}, {'user_id': 2, 'email_address' : 'wendy@aol.com', '_id':4}, ])