我正在使用
flask
、mysql
和 sqlalchemy
开发应用程序。
当我尝试在唯一列中插入重复数据时,应用程序崩溃了。除了这样之外,还有什么方法可以在 try 中捕获此异常吗?
if form.validate_on_submit():
hashed_password = generate_password_hash(form.password.data, method='sha256')
# write data on DB
try:
new_user = User(name=form.name.data, surname=form.surname.data, email=form.email.data,
pwd_hash=hashed_password, is_active=False, urole=form.urole.data)
db.session.add(new_user)
db.session.commit()
return '<h1>Welcome, You are a new user!</h1>'
except IntegrityError:
return '<h1>This email alredy exists!</h1>'
这就是我在我的应用程序中解决它的方法:
import pymysql
from sqlalchemy import exc
def add_bulk_data(data):
for entry in data:
session.add(org)
try:
session.commit()
except pymysql.err.IntegrityError as e:
session.rollback()
except exc.IntegrityError as e:
session.rollback()
except Exception as e:
session.rollback()
我必须将
commit()
命令封装在我的 try 语句中。
好的,这确实解决了问题,但是这种情况下如何停止主键的自增呢?这可以防止 Flask 应用程序崩溃,但数据库中的主键会自动增量。