jea*_*anc 23 python orm sqlalchemy
我已经设法使用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'},
])
Run Code Online (Sandbox Code Playgroud)
我现在需要的是等同于更新的东西.我试过这个:
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},
])
Run Code Online (Sandbox Code Playgroud)
期望每行根据'id'字段进行更新,但它不起作用.我假设这是因为我没有指定WHERE子句,但我不知道如何使用字典中包含的数据指定WHERE子句.
有人能帮助我吗?
van*_*van 51
阅读文档的" 插入,更新和删除"部分.以下代码应该让您入门:
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},
])
Run Code Online (Sandbox Code Playgroud)
Jon*_*ark 12
Flask Session具有调用bulk_insert_mappings和的功能bulk_update_mappings.检查这里.
请注意,您必须在映射中提供主键
# List of dictionary including primary key
user_mappings = [{
'user_id': 1, # This is pk?
'email_address': 'jack@yahoo.com',
'_id': 1
}, ...]
session.bulk_update_mappings(User, user_mappings)
session.commit()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22152 次 |
| 最近记录: |