使用bulk_save_objects

时间:2018-07-02 07:53:23

标签: flask-sqlalchemy

使用session.bulk_save_objects后如何获取插入的ID(生成的主键)?

我尝试过:

for x in y:
  obj = Post(...)
  obj_list.append(obj)

session.bulk_save_objects(obj_list)
session.commit()

for i in obj_list:
  print(i.id)

id为None。这些行已成功插入。

2 个答案:

答案 0 :(得分:1)

您需要在bulk_save_object方法中添加return_defaults = True,如下所示以获取记录的主键

for x in y:
   obj = Post(...)
   obj_list.append(obj)
session.bulk_save_objects(obj_list,return_defaults = True)
session.commit()

for i in obj_list:
   print(i.id)

答案 1 :(得分:0)

执行此操作而不是使用bulk_save_objects(每个值都发出插入语句)的更有效的方法是将from sqlalchemy.dialects.postgresql.insert与返回子句一起使用。

insert_stmt = insert(Table).values(dictionary_mappings).returning(Table.id)
ids = db.session.execute(insert_stmt).fetchall()