You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Peewee中从批量插入操作获取ID?含多轮插入需求

在Peewee中实现连续批量插入并获取生成ID

没问题,我来给你一步步拆解怎么实现这个需求——从第一次批量插入获取ID,用这些ID构造新数据做二次批量插入,还能拿到新ID继续后续操作。

1. 先准备模型和数据库连接

首先我们定义两个关联模型(用父子关系做示例,你可以根据自己的业务调整),确保数据库连接正常:

from peewee import *

# 初始化SQLite数据库(换成你实际用的数据库,比如PostgreSQL/MySQL都可以)
db = SqliteDatabase('batch_insert_demo.db')

class Parent(Model):
    name = CharField()

    class Meta:
        database = db

class Child(Model):
    parent = ForeignKeyField(Parent, backref='children')
    name = CharField()

    class Meta:
        database = db

# 第一次运行时创建表
db.create_tables([Parent, Child])

2. 第一次批量插入:获取初始插入的ID

使用Peewee的bulk_create()方法批量插入数据,它会返回插入后的模型实例,每个实例都包含自动生成的id属性:

# 准备要插入的Parent数据
parent_records = [
    {'name': 'Alice'},
    {'name': 'Bob'},
    {'name': 'Charlie'}
]

# 批量插入,返回包含ID的模型实例列表
inserted_parents = Parent.bulk_create([Parent(**data) for data in parent_records])

# 提取所有插入的Parent ID,用于后续构造新数据
parent_ids = [p.id for p in inserted_parents]
print(f"批量插入的Parent ID: {parent_ids}")

3. 用获取的ID构造新数据,二次批量插入并获取新ID

现在用刚才拿到的parent_ids构造关联的Child数据,重复批量插入操作,同样可以拿到新生成的Child ID:

# 构造关联的Child数据
child_records = []
for pid in parent_ids:
    # 每个Parent对应两条Child数据,你可以根据业务调整
    child_records.append({'parent': pid, 'name': f'Kid of {pid}'})
    child_records.append({'parent': pid, 'name': f'Another Kid of {pid}'})

# 批量插入Child数据,获取带ID的实例
inserted_children = Child.bulk_create([Child(**data) for data in child_records])

# 提取新生成的Child ID,用于后续操作
child_ids = [c.id for c in inserted_children]
print(f"批量插入的Child ID: {child_ids}")

关键注意事项

  • 数据库兼容性:bulk_create()在PostgreSQL、SQLite 3.35+、MySQL中都能正确返回带ID的实例,这是因为这些数据库支持RETURNING语句(MySQL通过自增序列计算实现)。如果是旧版本数据库,可能需要额外处理,但现在大部分主流数据库版本都支持。
  • 批量大小:如果插入的数据量极大,可以给bulk_create()传递batch_size参数,分批次插入,避免内存溢出。
  • 事务控制:如果需要确保多轮插入的原子性,可以用db.atomic()上下文管理器包裹所有操作,避免部分插入成功部分失败。

这样一套流程下来,你就能完成连续的批量插入操作,每一步都能拿到新生成的ID,无缝衔接后续的插入逻辑。

内容的提问来源于stack exchange,提问作者user9377278

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:47:36