Я использую полезную нагрузку API для обновления базы данных.У меня есть некоторые бизнес-правила, навязанные ограничениями внешнего ключа, например: с адресом должен быть связан идентификатор клиента (один клиент <-> много адресов ').
При обновлении базы данных я должен убедиться, чтоВсе или ничего не зафиксировано, чтобы не обновлять одну таблицу и не обновлять другую, поэтому я пишу обновление шаг за шагом:
- Обновление клиентов
- Адрес обновления
- Зафиксировать все изменения
В основном я использую список экземпляров классов для вызова add_all (), и просто фиксирую после обоих add_all.Где id - это PK для клиентов, а FK для адресов.
customers_list = []
customer_entry = Customers(name=name, id=id)
customer_list.append(entries)
db.session.add_all(customer_list)
address_list = []
address_entry = Address(id=customer_id, zip=zip)
address_list.append(entries)
db.session.add_all(address_list)
db.session.commit()
Дело в том, что, когда он получает адрес, он выдает ошибку целостности, поскольку не может найти customer_id
в таблице «Клиенты» (поскольку она не была зафиксирована).
Я думаю о том, что какое-то время нужно отключить ограничение внешнего ключа, но это не кажется хорошим способом обеспечить надежную базу данных.
Как сохранить согласованность, избегая ошибок целостности (ограничение FK)?