如何用SQLAlchemy执行批量插入?附元组列表示例
SQLAlchemy批量插入记录的实现方法
完全可以通过conn.execute()实现批量插入元组列表的操作,以下是具体实现要点:
1. 构造正确的INSERT语句
根据你的表结构,有两种常用方式构造插入语句:
- 文本SQL方式(适合快速编写):
假设你的表名为your_table,字段依次为id、code、value,则:from sqlalchemy import text insert_query = text("INSERT INTO your_table (id, code, value) VALUES (:id, :code, :value)") - SQLAlchemy Core表对象方式(更安全,兼容ORM):
先定义表结构,再生成插入语句:from sqlalchemy import Table, Column, Integer, String, MetaData metadata = MetaData() your_table = Table( "your_table", metadata, Column("id", Integer), Column("code", String), Column("value", Integer) ) insert_query = your_table.insert()
2. 批量插入的调用方式
SQLAlchemy 1.4+版本(当前主流版本)的execute()方法直接支持批量传入元组列表:
# 你的待插入数据 row_chunk = [(1001, '1bz', 120), (1002, '7zmk', 150), (1003, '8wqt', 170), (1005, '1qpo', 1100), (1006, '5qop', 4400), (1006, '5qop', 4400), (1007, '22mn', 227), (1008, 'ASDC01', 2000), (1001, None, None), (1010, None, None), (1008, 'ASDC01', 2000), (1002, None, None)] # 执行批量插入 conn.execute(insert_query, row_chunk) # 提交事务(如果不是自动提交模式) conn.commit()
注意:若使用SQLAlchemy 1.4之前的旧版本,需改用
conn.executemany(insert_query, row_chunk)来实现批量操作。
3. 处理特殊数据场景
你的数据包含重复记录和NULL值,需注意:
NULL值会被直接插入到对应字段,只要表字段允许为NULL即可;- 若表有唯一约束(比如
id是主键),重复记录会触发报错,可通过添加冲突处理语句解决:- MySQL:在INSERT语句末尾添加
ON DUPLICATE KEY UPDATE value = VALUES(value)(按需更新字段) - PostgreSQL:添加
ON CONFLICT (id) DO NOTHING(忽略重复)或ON CONFLICT (id) DO UPDATE SET value = EXCLUDED.value(更新重复记录)
- MySQL:在INSERT语句末尾添加
内容的提问来源于stack exchange,提问作者Shaheer Shah
相关产品推荐
相关产品推荐

