2014-12-31 2 views
4

이 질문에 대한 제목이 정확하지 않은 것 같습니다. 나는 내 모든 테이블에 충분히 고유 제한 조건을 추가 할 수 있지만 경우에 난 후에 난 무엇을 해야할지 모르겠습니다 이하 : 그래서 지점에 고유 한 제약 조건을 추가 할 때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') 

을 테이블의 이름 열에 다른 계정에 같은 이름의 분기를 추가 할 수 없습니다. 예를 들어, Seattle은 AccountA와 AccountB의 지점이 될 수 있습니다.

내가 원하는 것은 account.id가 동일한 경우에만 고유성을 검사하는 제약 조건을 적용하는 것입니다. 이것이 가능한가?

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

내 지점 클래스에 다음을 통해 증류기로 데이터베이스에 밀어 :

+1

가능한 중복 [여러 열에 걸쳐 고유 한 sqlalchemy] (http://stackoverflow.com/questions/10059345/sqlalchemy-unique-across-multiple-columns) – dirn

+0

정확한 복제. 링크를 가져 주셔서 감사합니다 - 그것은 내가 필요한 솔루션으로 나를 도왔습니다! – Chockomonkey

답변

4

감사가 중복을 지적, dirn, 나는 추가 한

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

나는 것 그러나 필자는 alebmic을 통해이 제약 조건을 수동으로 추가했기 때문에 모델에 올바르게 추가했는지 확신 할 수 없습니다. 나는 결국 DB를 지우고 새 데이터베이스를 시작할 때 알게 될 것입니다.

편집

나는 새 데이터베이스를 롤백하고 위에서 __table_args__ 올바르게 작동합니다!

관련 문제