Как получить идентификаторы от массовой вставки в Peewee?
Как получить ids
от массовой вставки в Peewee?
Мне нужно вернуть вставленные идентификаторы для создания нового массива dict следующим образом:
a = [{"product_id": "inserted_id_1", "name": "name1"}, {"product_id": "inserted_id_2", "name": "name1"}]
Затем мне нужно вставить это, используя объем, как:
ids = query.insertBulk(a)
В свою очередь последний запрос должен вернуть мне новые идентификаторы для дальнейшей аналогичной вставки.
1 ответ
Решение
Если вы используете Postgresql, который поддерживает запросы вида "INSERT ... RETURNING", вы можете получить все идентификаторы:
data = [{'product_id': 'foo', 'name': 'name1'}, {...}, ...]
id_list = SomeModel.insert_many(data).execute()
Для SQLite или MySQL, которые не поддерживают предложение RETURNING, вам, вероятно, лучше всего сделать это:
with db.atomic() as txn:
accum = []
for row in data:
accum.append(SomeModel.insert(row).execute())