Массовая INSERT IGNORE с использованием Flask-SQLAlchemy - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь обновить базу данных, используя данные, собранные 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> вместо того, чтобы быть экземпляром класса, является ли объект экземпляра класса в памяти.

У кого-нибудь есть какие-либо предложения по решению этой проблемы?Не стесняйтесь предложить другой подход или просто корректировку.

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...