我想弄清楚为什么字段的“唯一”约束不起作用。我正在使用 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
我希望,因为用户名字段有一个唯一的限制,它不允许我添加具有相同用户名的用户。不过,确实如此。
从外壳:
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'>]
我错过了什么吗?
最佳答案
您是否在第一次创建表后添加了 unique = True
?如果是这样,约束将不会应用于数据库。您需要如何进行此操作如下:
使用 Flask 迁移。这对允许您迁移现有数据库模型非常有用。 (推荐)
如果这是一个测试/开发环境,只需删除表并再次运行 db.create_all()。
我无法通过在创建表之前添加唯一约束来创建数据库来复制您发布的错误。
但是,我可以通过在创建表后添加唯一约束来做到这一点。
希望这对您有所帮助!
关于python - Flask-sqlalchemy 唯一约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577992/