python - sqlalchemy.exc.IntegrityError:唯一约束失败
问题描述
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) 唯一约束失败:user.city [SQL: INSERT INTO user (username, "accountName", city, email, avatar, password) 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”然后它会引发错误,但在我的用户模型中 unique = True 仅用于用户名。
解决方案
SQLAlchemy 作为一个库可以很容易地用于管理表,甚至创建它们,但只能用于一次。
如果您之前有一个唯一city
列,并且您没有从数据库中更改它,它将继续加强对该列的唯一约束。
因为对于数据库来说,它还是有唯一约束的。您不能在 SQLite 中删除UNIQUE
约束。ALTER
请参阅此答案以安全地重新创建数据库。
推荐阅读
- c++ - How can I have my array stop reading in characters when the enter key is pressed?
- sql-server - 如何搜索 2 个 DTpicker 之间的日期范围?
- php - 如何区分2个多维数组?
- c++ - 链接二进制或共享库时,为什么必须传入我依赖的共享库?
- python - Beautifulsoup 解析硒元素
- python - 在 Python 的 Try 和 except 中的“if”语句中使用“or”
- react-native - 如何在反应原生中显示加载图标,直到反应原生的API响应?
- python - Python/Pandas - 从地址中删除门牌号
- android - 颤振:“AccessibilityViewEmbedder.java 第 511 行”
- kubernetes - 与服务器 xxxx:6443 的连接被拒绝 - 您是否指定了正确的主机或端口?