如何让两个属性一起成为唯一的?

How to have two attributes, together, be unique?

我有一个用户 class,看起来像这样:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(15), unique=True, nullable=False)
    last_name = db.Column(db.String(15), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)

    def __repr__(self):
        return f"User('{self.first_name}', '{self.last_name}', '{self.email}')"

如您所见,first_namelast_name 必须是唯一的,但这并不是我真正想要的。相反,我希望全名是唯一的,因此 first_namelast_name 一起必须是唯一的。我该怎么做?

您可以使用 Declarative Table Configuration and define a UNIQUE constraint。但是,请记住,可以有多个人使用相同的名字和姓氏组合。

class User(db.Model, UserMixin):
     __table_args__ = (db.UniqueConstraint('first_name', 'last_name'),)
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(15), nullable=False)
    last_name = db.Column(db.String(15), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)

    def __repr__(self):
        return f"User('{self.first_name}', '{self.last_name}', '{self.email}')"