我的公司有国家/地区代码,商家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'))
但是说数据变化很明显,同一家公司的id
并不总是相同的(公司可能会从数据库中删除,然后在不同的id
重新添加)。但是,country_code
和business_id
的组合总是保证既是唯一的,也是同一家公司的常量。
如何为Employee
的{{1}} Company
和country_code
创建两个外键?
我尝试通过较旧的StackOverflow问题执行此操作,但它引发了一个错误,business_id
不应该使用:
'str'
然而,Python的语法阻止我引用类本身。
答案 0 :(得分:1)
我不确定你究竟是在问什么,但下面的代码示例做了两件事,我认为这会有所帮助:
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']
),
)