Я пытаюсь обновить 2 таблицы в моей базе данных PostgreSQL, но после выполнения оператора select возникает ошибка sqlalchemy при попытке запустить оператор обновления вместо выбора.
Я переключил параметры auto_flush и попытался запустить session.flush () перед запросом к таблице B, а также закомментировал строки, которые могли бы вызвать обновление базы данных, но та же ошибка все еще появляется.
# B.a_id references A.id
list_A = A.query.all()
for a in list_A:
a.some_field = some_value
list_B = B.query.filter_by(a_id=a.id).all()
for b in list_B:
b.some_field = some_value
db.session.commit()
Я ожидаю, что A и B будут обновлены на db.session.commit()
, но программа вылетает прямо на list_B = B.query.filter_by(a_id=a.id).all()
со следующей ошибкой:
sqlalchemy.exc.IntegrityError: (psycopg2.errors.NotNullViolation) null value in column "a_id" violates not-null constraint
[SQL: UPDATE B SET a_id=%(a_id)s WHERE B.id = %(b_id)s]
[parameters: (
{'a_id': None, 'b_id': 723},
{'a_id': None, 'b_id': 724},
{'a_id': None, 'b_id': 725},
{'a_id': None, 'b_id': 726},
{'a_id': None, 'b_id': 727},
{'a_id': None, 'b_id': 743},
{'a_id': None, 'b_id': 772},
{'a_id': None, 'b_id': 878}
... displaying 10 of 30 total bound parameter sets ...
{'a_id': None, 'b_id': 1042},
{'a_id': None, 'b_id': 1043})]
(Background on this error at: http://sqlalche.me/e/gkpj)
I 'Я застрял на этом некоторое время, и любая помощь / подсказка очень ценится!