Я пытаюсь обновить базу данных, используя данные, собранные API, и мне нужно убедиться, что все таблицы обновляются.
Когда-нибудь я получу данные, которые уже есть в базе данных, поэтому я хочусделать INSERT IGNORE.
Мой текущий код выглядит примерно так:
def update_orders(new_orders):
entries = []
for each_order in new_orders:
shipping_id = each_order['id']
title = each_order['title']
price = each_order['price']
code = each_order['code']
source = each_order['source']
phone = each_order['phone']
category = each_order['delivery_category']
carrier = each_order['carrier_identifier']
new_entry = Orders(
id=shipping_id,
title=title,
code=code,
source=source,
phone=phone,
category=category,
carrier=carrier,
price=price
)
entries.append(new_entry)
if len(entries) == 0:
print('No new orders.')
break
else:
print('New orders:', len(entries))
db.session.add_all(entries)
db.session.commit()
Это хорошо работает, когда я создаю базу данных с нуля, но выдает ошибку, если естьдублирующиеся данные, и я не могу зафиксировать вставки.
Я уже некоторое время читаю и нашел обходной путь, который использует prefix_with
:
print('New orders:', len(entries))
if len(entries) == 0:
print('No new orders.')
else:
insert_command = Orders.__table__.insert().prefix_with('OR IGNORE').values(entries)
db.session.execute(insert_command)
db.session.commit()
ПроблемаЯвляется ли values(entries)
набором объектов: <shop.database.models.Orders object at 0x11986def0>
вместо того, чтобы быть экземпляром класса, является ли объект экземпляра класса в памяти.
У кого-нибудь есть какие-либо предложения по решению этой проблемы?Не стесняйтесь предложить другой подход или просто корректировку.
Большое спасибо.