2017-02-18 118 views
1

我有一個表包含用戶數據,我想更新許多使用字典列表的用戶的信息。目前我使用for循環一次發送更新語句一個字典,但速度很慢,我希望有一個批量方法來做到這一點。SQLAlchemy - 使用字典列表更新表

user_data = [{'user_id' : '12345', 'user_name' : 'John'}, {'user_id' : '11223', 'user_name' : 'Andy'}] 

connection = engine.connect() 
metadata = MetaData() 

for row in user_data: 
     stmt = update(users_table).where(users_table.columns.user_id == row['user_id']) 
     results = connection.execute(stmt, row) 

在此先感謝!

回答

1
from sqlalchemy.sql.expression import bindparam 

connection = engine.connect() 

stmt = users_table.update().\ 
where(users_table.c.id == bindparam('_id')).\ 
values({ 
    'user_id': bindparam('user_id'), 
    'user_name': bindparam('user_name'), 
}) 

connection.execute(stmt, [ 
{'user_id' : '12345', 'user_name' : 'John', '_id': '12345'}, 
{'user_id' : '11223', 'user_name' : 'Andy', '_id': '11223'} 

]) 
+0

希望這會有所幫助! – Gigapalmer

+0

謝謝!在這個例子中,我應該在where語句中將'id'更改爲'user_id'並將'_id'更改爲'user_id'?所以它會是:'where(users_table.c.user_id == bindparam('user_id'))。否則我得到:'StatementError:(sqlalchemy.exc.InvalidRequestError)綁定參數'_id'需要一個值 – Venetian

+0

@威尼斯人根據您使用的數據庫不同,這可能不會顯着提高性能。例如,看看[這個問題](http://stackoverflow.com/questions/8134602/psycopg2-insert-multiple-rows-with-one-query)(PostgreSQL)。 – univerio