Почему я получаю peewee.InternalError для всех последующих команд после одной неудачной команды, используя peewee ORM с posgresql? - PullRequest
0 голосов
/ 19 октября 2018

Я много работаю с peewee и postgresql в течение нескольких месяцев.Внезапно это начало происходить.Если я выполняю любую команду запроса и получаю сообщение об ошибке, все последующие команды начинают возвращать peewee.InternalError: current transaction is aborted, commands ignored until end of transaction block.

. Я думал, что это поведение началось, когда я обновил peewee с 3.5.2 до 3.7.2, но с тех пор я понизили поведение продолжается.Это определенно не всегда происходило.

В простейшем случае у меня есть таблица базы данных с ровно одной записью.Я пытаюсь создать новую запись с тем же идентификатором, и я получаю IntegrityError, как и ожидалось.Если затем я попытаюсь выполнить другие команды запроса в этой базе данных, я получу InternalError, как указано выше.

Этого не происходит с базой данных sqlite.

Я переустановил peewee и psycopg2, безрезультатно.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Несмотря на то, что можно использовать автозапуск, гораздо лучше явно управлять своими транзакциями, чтобы при возникновении ошибки целостности вы могли ее перехватить и явно откатить.Например, если у вас есть страница регистрации пользователя и существует уникальное ограничение на имя пользователя, вы можете заключить ее в попытку / исключение и выполнить откат при неудаче.

0 голосов
/ 19 октября 2018

Попробуйте установить autorollback=True в Database классе.Вы можете следить за документами здесь

Ваша проблема уже известна в этой проблеме

...