sqlalchemy.exc.IntegrityError:(sqlite3.IntegrityError)唯一约束失败:user.city [SQL:INSERT INTO用户(用户名,“帐户名”,城市,电子邮件,头像,密码)VALUES(?,?,?,?,?,?)) [参数:(“ sunny123”,“ sunny kumar”,“ Tumkur”,“ sunny@gmail.com”,“ default.jpg”,“ $ 2b $ 12 $ n3eEOEBhJ7aVEA4wctQn4O37jEYdgI0N2jqhNKm7Giy7Y7hxwaZIS”) (此错误的背景位于:http://sqlalche.me/e/gkpj)
我的用户模型是
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(20), unique = True, nullable = False)
accountName = db.Column(db.String(20), nullable = False)
city = db.Column(db.String(20), nullable = False)
email = db.Column(db.String(120), unique = True, nullable = False)
avatar = db.Column(db.String(20), nullable = False, default = 'default.jpg')
password = db.Column(db.String(60), nullable = False)
def __repr__(self):
return f"User('{self.username}', '{self.accountName}','{self.city}','{self.email}', '{self.avatar}')"`enter code here`
我的路线是
@app.route('/signup', methods = ['GET', 'POST'])
def signup():
if current_user.is_authenticated:
return redirect(url_for('home'))
form = SignUp()
if form.validate_on_submit():
hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
user = User(username = form.username.data, accountName = form.accountName.data, city = form.city.data, email = form.email.data, password = hashed_password)
db.session.add(user)
db.session.commit()
flash('Your account has been created, now you can Signin', 'success')
return redirect(url_for('signin'))
return render_template('signup.html', title = 'Sign Up', form = form)
每当我尝试添加一个城市名称的用户时,例如先前的用户提到的城市名称“ abc”,就会引发错误,但是在我的用户模型中,唯一= True仅用于用户名。
答案 0 :(得分:0)
SQLAlchemy作为库可以轻松地用于管理表,甚至可以创建表,但是仅一次。
如果您以前有一个唯一的city
列,并且尚未从数据库中进行更改,它将继续加强该列的唯一约束。
因为对于数据库,它仍然具有唯一的约束。您无法在SQLite中使用UNIQUE
删除ALTER
约束。
请参阅此answer,以安全地重新创建数据库。