表定义如下,
class User(db.Model):
__tablename__ = 'ausers'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
sex = db.Column(db.String(64))
def __repr__(self):
return '<User %r>' % self.username
在数据中已经有一条username字段为susan的记录,
再运行以下语句
user_susan = User(username='susan')
db.session.add_all([user_susan])
db.session.commit()
会报错
IntegrityError: (_mysql_exceptions.IntegrityError) (1062, "Duplicate entry 'susan' for key 'ix_ausers_username'") [SQL: u'INSERT INTO ausers (username, role_id, sex) VALUES (%s, %s, %s)'] [parameters: ('susan', None, None)]
怎么处理这种插入重复记录时的问题,每次插入前都需要先读一遍已有的记录吗?
与数据库交互这种会抛异常的地方一定要捕获异常,然后再根据情况处理,不需要每次先读先判断,你的代码可以改成这样:
关于
try
,except
,else
,finally
的基本语法不多赘述,总之牢记:会报异常的地方一定要捕获。这是编码习惯问题。