Flask-sqlalchemy独特的禁令不起作用

时间:2017-06-15 22:27:04

标签: python sqlalchemy unique-constraint

我试图找出为什么"独特的"字段的约束不起作用。我正在使用Flask,SQLAlchemy和Sqlite。

考虑模型:

from app import db
from flask_login import UserMixin

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True)
    password = db.Column(db.String(64))
    email = db.Column(db.String(120), unique=True)

    def __repr__(self):
        return '<User %r>' % self.username

我希望,由于用户名字段存在唯一约束,因此我不允许添加具有相同用户名的用户。但确实如此。

来自shell:

from app import db
from app.models import User

user = User(username='test')
user2 = User(username='test')

db.session.add(user)
db.session.commit()

db.session.add(user2)
db.session.commit()

User.query.all()

输出:

[<User 'test'>, <User 'test'>]

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您是否在第一次创建表后添加了unique = True?如果是这样,则约束将不会应用于数据库。您需要如何处理此问题如下:

  1. 使用Flask迁移。这是非常有用的,允许您迁移现有的数据库模型。 (推荐)

  2. 如果这是一个测试/开发环境,只需删除表并再次运行db.create_all()。

  3. 我无法通过在创建表之前添加唯一约束来创建数据库来复制您发布的错误。

    但是,我可以通过在创建表后添加唯一约束来实现。

    希望这有帮助!