Sqlalchemy выполняет оператор обновления вместо select - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь обновить 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 'Я застрял на этом некоторое время, и любая помощь / подсказка очень ценится!

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