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

如何批量刷新SQLAlchemy生成的多条对象实例?

错误根因

Session.refresh() 仅支持传入单个ORM映射实例,你直接向该方法传入users列表对象,才会触发sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.list' is not mapped报错。

解决方案

有两种常用的修复方案:

方案1:循环逐个刷新实例

适合小批量插入场景,直接替换原有的db.refresh(users)逻辑即可:

def seed_users(db: Session, number: int = 50):
    users = []
    for _ in range(number):
        user_seed = {
            'first_name': f.first_name(),
            'last_name': f.last_name(),
            'email_address': f.ascii_company_email()
        }
        users.append(models.User(**user_seed))

    db.bulk_save_objects(users)
    db.commit()
    # 替换原有批量refresh逻辑
    for user in users:
        db.refresh(user)
    return users

方案2:批量插入时直接回填字段(更高效)

在调用bulk_save_objects时新增return_defaults=True参数,插入完成后会自动将数据库生成的字段(如自增主键、默认值字段)回填到所有实例中,无需额外调用refresh,性能远高于方案1,适合大量数据插入场景,Postgres原生支持该参数:

def seed_users(db: Session, number: int = 50):
    users = []
    for _ in range(number):
        user_seed = {
            'first_name': f.first_name(),
            'last_name': f.last_name(),
            'email_address': f.ascii_company_email()
        }
        users.append(models.User(**user_seed))

    db.bulk_save_objects(users, return_defaults=True)
    db.commit()
    return users

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:06:03