【问题标题】:sqlalchemy.exc.IntegrityError: UNIQUE constraint failedsqlalchemy.exc.IntegrityError:唯一约束失败
【发布时间】:2020-10-22 13:43:07
【问题描述】:

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE 约束失败: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 仅用于用户名。

【问题讨论】:

    标签: python flask sqlalchemy


    【解决方案1】:

    SQLAlchemy 作为一个库可以很容易地用于管理表,甚至可以创建它们,但仅限一次

    如果您之前有一个唯一的 city 列,并且您没有从数据库中更改它,它将继续加强对该列的唯一约束。

    因为对于数据库来说,它仍然具有唯一性约束。您不能在 SQLite 中使用 ALTER 删除 UNIQUE 约束。

    请参阅此answer 以安全地重新创建数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2022-08-10
      • 2021-08-07
      • 2021-07-02
      • 2013-11-11
      • 2019-04-28
      • 1970-01-01
      相关资源
      最近更新 更多