В проекте я начал с MySQL в качестве базы данных.Вместо того, чтобы сначала проверять, я просто делаю вставку, и если я получаю исключение IntegrityError с кодом 1062, я знаю, что есть дублирующаяся запись, и предупреждаю пользователя, чтобы сделать это и то.
, которое выглядит в основном какthis:
try:
# add duplicate, nothing bad happens yet, is only in sqla session
db.session.add(User(email='already_used_email@address_that_has_to_be_unique.com'))
# commit, now the IntegrityError is raised, when sqla inserts
db.session.commit()
except IntegrityError as e:
db.session.rollback()
# this is what i do with mysql, check the exception for code 1062
# how can i replace this with something db independent?
code, msg = e.orig
if code == 1062:
# send warning
pass
Теперь для одного это уже невозможно проверить, например.в памяти sqlite.Не хорошо, но я мог бы с этим смириться.
Во-вторых, я мог бы (должен / хочу для других, выходящих за рамки этого вопроса) переключиться на Postgres.Конечно, я мог бы просто изменить код на (также) проверку кодов ошибок Postgres, но я надеялся, что есть способ заставить SQLALchemy сообщить мне, что дубликат произошел независимо от базы данных.Абстракция базы данных диалекта ...?