SQLAlchemy和MySQL中一对多关系中列的唯一约束

Cho*_*key 6 mysql sqlalchemy one-to-many flask alembic

我不确定我是否正确地提出了这个问题.我可以为我的任何表添加一个独特的约束,但在下面的情况下,我不知道如何做我想要的事情:

class Branch(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(160))
    #foreign key for 'branches' in Account class. access with Branch.account
    account_id = db.Column(db.Integer, db.ForeignKey('account.id'))

class Account(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(160), unique=True)
    branches = db.relationship('Branch', backref = 'account', lazy = 'dynamic')
Run Code Online (Sandbox Code Playgroud)

因此,当我向Branch表的name列添加唯一约束时,我无法将同名分支添加到不同的帐户.例如,西雅图可能是AccountA和AccountB的分支.

我想要做的是应用仅在account.id相同时检查唯一性的约束.这可能吗?

Cho*_*key 6

感谢dirn指出副本,我补充说:

__table_args__ = (db.UniqueConstraint('account_id', 'name', name='_account_branch_uc'),
                 )
Run Code Online (Sandbox Code Playgroud)

到我的Branch类,然后通过alembic将其推送到数据库:

def upgrade():
    op.create_unique_constraint('_account_branch_uc', 'branch', ['name','account_id'])
Run Code Online (Sandbox Code Playgroud)

不过,我会注意到,由于我通过alebmic手动添加了这个约束,我不确定我是否将它正确添加到我的模型中.我想我会在最终擦拭数据库并开始新数据库时找到答案.

编辑

我已经推出了一个新的数据库,__table_args__上面的工作正常!