Как получить идентификаторы от массовой вставки в 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())
Другие вопросы по тегам