首页 > 解决方案 > 使用 SQLAlchemy ORM 批量插入并返回主键

问题描述

bulk_save_objects我正在尝试使用or将字典列表插入表中bulk_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]

标签: pythonormsqlalchemy

解决方案


文档_

给定的对象不会添加到会话中,并且不会在它们上建立其他状态,除非还设置了 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()

推荐阅读