【问题标题】:Unique constraint for column in one-to-many relationship in SQLAlchemy & MySQLSQLAlchemy和MySQL中一对多关系中列的唯一约束
【发布时间】:2015-02-27 18:10:28
【问题描述】:

我不确定这个问题的标题是否正确。我可以为我的任何表添加足够好的唯一约束,但在下面的情况下,我不确定如何做我所追求的:

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')

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

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

【问题讨论】:

标签: mysql flask sqlalchemy one-to-many alembic


【解决方案1】:

感谢dirn,指出重复,我已添加:

__table_args__ = (db.UniqueConstraint('account_id', 'name', name='_account_branch_uc'),
                 )

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

def upgrade():
    op.create_unique_constraint('_account_branch_uc', 'branch', ['name','account_id'])

不过,我会注意到,由于我通过 alebmic 手动添加了这个约束,我不确定我是否将它正确地添加到我的模型中。我想当我最终擦除我的数据库并开始一个新的数据库时,我会发现。

编辑

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

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 2018-06-29
    • 2019-02-27
    • 2010-12-22
    • 2019-03-04
    • 1970-01-01
    • 2010-11-16
    • 2010-11-23
    相关资源
    最近更新 更多