【问题标题】:Bulk insert with SQLAlchemy ORM and return primary keys使用 SQLAlchemy ORM 批量插入并返回主键
【发布时间】:2019-11-07 20:11:37
【问题描述】:

我正在尝试使用bulk_save_objectsbulk_insert_mappings 将字典列表插入到表中。有什么方法可以获取每个条目的主键对象列表?

try:
    cycle_object_list = []
    for cycle in cycle_list:
        period = Period()
        for k, v in cycle.items():
            setattr(period, k, v)
        cycle_object_list.append(period)

    db.session.bulk_save_objects(cycle_object_list)
    db.session.commit()
    print(cycle_object_list)
except Exception:
    db.session.rollback()
    raise
finally:
    db.session.close()

我期待类似[Period.49, Period.50, Period.51]

但实际结果是[Period.None, Period.None, Period.None]

【问题讨论】:

    标签: python orm sqlalchemy


    【解决方案1】:

    docs

    给定的对象不会添加到会话中,也不会在它们上建立额外的状态,除非还设置了 return_defaults 标志,在这种情况下,将填充主键属性和服务器端默认值。

    所以这可能有效:

    try:
        cycle_object_list = []
        for cycle in cycle_list:
            period = Period()
            for k, v in cycle.items():
                setattr(period, k, v)
            cycle_object_list.append(period)
    
        db.session.bulk_save_objects(cycle_object_list, return_defaults=True)
        db.session.commit()
        print(cycle_object_list)
    except Exception:
        db.session.rollback()
        raise
    finally:
        db.session.close()

    【讨论】:

    猜你喜欢
    • 2011-04-09
    • 2019-05-16
    • 2021-08-21
    • 1970-01-01
    • 2019-10-24
    • 2012-01-18
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多