Уникальное ограничение для столбца в отношении "один ко многим" в SQLAlchemy & MySQL
Я не уверен, что правильно назвал этот вопрос. Я могу добавить уникальное ограничение достаточно хорошо для любой из моих таблиц, но в приведенном ниже случае я не уверен, как сделать то, что мне нужно:
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')
поэтому, когда я добавил уникальное ограничение в столбец имени таблицы ветвей, я не смог добавить одноименные ветви в разные учетные записи. Например, Сиэтл может быть филиалом как AccountA, так и AccountB.
то, что я хочу сделать, это применить ограничение, которое проверяет на уникальность только при аккаунте.id тот же самый. Возможно ли это?
1 ответов
благодаря дирну, указав на дубликат, я добавил:
__table_args__ = (db.UniqueConstraint('account_id', 'name', name='_account_branch_uc'),
)
в мой класс филиала, а затем толкнул его в базу данных с перегонным кубом через:
def upgrade():
op.create_unique_constraint('_account_branch_uc', 'branch', ['name','account_id'])
Я отмечу, однако, что, поскольку я добавил Это ограничение вручную через alebmic, я не уверен, правильно ли я добавил его в свою модель. Полагаю, я узнаю, когда в конце концов вытру свою БД и начну новую.
редактировать
Я свернул новую базу данных и __table_args__
сверху работает правильно!