2016-12-02 66 views
1

我公司與國家代碼,業務ID,和員工的列表:具有多個父鍵的子項?

class Company(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    business_id = db.Column(db.String(20), nullable=False) 
    country_code = db.Column(db.String(2), nullable=False) 
    employee = db.relationship('Employee', backref='company') 

class Employee(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    company_id = db.Column(db.Integer, db.ForeignKey('company.id')) 

但contantly說,數據的變化,而id並不總是同一公司同一(一公司可能會從數據庫中刪除,然後重新添加不同的id)。然而,country_codebusiness_id的組合是總是保證是唯一的,並且對於同一個公司是不變的。

如何爲Employee創建兩個外鍵指向Companycountry_codebusiness_id

我試圖通過一箇舊的StackOverflow問題這樣做,但它提出了一個錯誤,'str'不應使用:

class Company(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    business_id = db.Column(db.String(20), nullable=False) 
    country_code = db.Column(db.String(2), nullable=False) 
    employee = db.relationship('Employee', backref='company', foreign_keys=['Company.business_id', 'Company.country_code']) 

然而,Python的語法阻止我指的是類本身。

回答

1

我不知道你問什麼,但下面的代碼樣本做兩件事情,我認爲這將是有益的:

  1. 定義複合外鍵
  2. 指示要使用的外鍵對於關係Company之間和Employee

型號:

class Company(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    business_id = db.Column(db.String(20), nullable=False) 
    country_code = db.Column(db.String(2), nullable=False) 
    name = db.Column(db.String(), nullable=False) 

    employee = db.relationship(
     'Employee', backref='company', 
     # 2. indicate FK to use below 
     foreign_keys=lambda: [Employee.business_id, Employee.country_code], 
     # foreign_keys=lambda: Employee.company_id, 
    ) 


class Employee(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    company_id = db.Column(db.ForeignKey('company.id')) 
    name = db.Column(db.String(), nullable=False) 

    business_id = db.Column(db.String(20), nullable=False) 
    country_code = db.Column(db.String(2), nullable=False) 

    # 1. define a composite foreign key 
    __table_args__ = (
     db.ForeignKeyConstraint(
      ['business_id', 'country_code'], 
      ['company.business_id', 'company.country_code'] 
     ), 
    ) 
+0

我不知道所有的表格參數等等究竟意味着什麼,但它似乎完全按照我想要的方式工作。謝啦! :) –

相關問題