2017-02-18 29 views
1

私はテーブルにユーザーデータがあり、辞書のリストを使って多くのユーザーの情報を更新したいと思います。現時点では、forループを使用して一度に1つの辞書を更新ステートメントに送信していますが、それは遅く、これを行うための一括メソッドがあることを望んでいます。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

ありがとう!この例では、 'id'を 'user_id'に、 '_id'を 'user_id'に変更する必要がありますか? StatementError :(sqlalchemy.exc.InvalidRequestError)バインドパラメータ '_id'に値が必要です – Venetian

+0

@(バインドパラメータ' _id ')は、ヴェネツィア使用しているデータベースによっては、パフォーマンスが大幅に向上することはありません。たとえば、[この質問](http://stackoverflow.com/questions/8134602/psycopg2-insert-multiple-rows-with-one-query)(PostgreSQL)を参照してください。 – univerio

関連する問題