2016-12-02 68 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

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

相关问题