gpt4 book ai didi

python - 如何为具有复合主键的表创建外键?

转载 作者:行者123 更新时间:2023-11-28 18:49:27 26 4
gpt4 key购买 nike

我在弄清楚如何为我正在定义的表正确构建 ForeignKey 列时遇到了很多麻烦。我在这里概述了我的模型(并在我的 PhoneNumber 模型中有问题的行旁边添加了评论):

class AreaCode(db.Model):
__tablename__ = 'areacodes'
area_code = db.Column(db.Integer, primary_key=True)
exchanges = db.relationship('Exchanges', backref='area_code')


class Exchange(db.Model):
__tablename__ = 'exchanges'
exchange = db.Column(db.Integer, primary_key=True)
area_code_pk = db.Column(db.Integer, db.ForeignKey('areacodes.area_code'), primary_key=True)


class PhoneNumber(db.Model):
__tablename__ = 'phonenumbers'
phone_number = db.Column(db.Numeric(precision=4, scale=0), primary_key=True)
exchange_pk = db.Column(db.Integer, db.ForeignKey('exchanges.exchange'), primary_key=True) # this doesnt work since Exchange has two primary keys

这是发生了什么:

我的 Exchange 表有一个复合主键。这是我的用例所必需的。

我试图定义的 PhoneNumber 表需要 Exchange 表的外键,但由于 Exchange 表有一个复合主键,我无法弄清楚如何使关系起作用。

任何指导将不胜感激。谢谢。

最佳答案

所以,在与 sqlalchemy 邮件列表上的几位大佬交谈后,我终于弄清楚了上述问题。下面是我的代码的最终版本,它允许我在表格之间正确关联:

class AreaCode(db.Model):
__tablename__ = 'areacodes'

area_code = db.Column(db.Integer, primary_key=True)


class Exchange(db.Model):
__tablename__ = 'exchanges'

exchange = db.Column(db.Integer, primary_key=True)
area_code_pk = db.Column(db.Integer, db.ForeignKey('areacodes.area_code'),
primary_key=True)
area_code = db.relationship('AreaCode', backref=db.backref('exchanges', lazy='dynamic'))


class PhoneNumber(db.Model):
__tablename__ = 'phonenumbers'
__table_args__ = (
db.ForeignKeyConstraint(
['exchange_exchange', 'exchange_area_code_pk'],
['exchanges.exchange', 'exchanges.area_code_pk'],
),
)

phone_number = db.Column(db.Integer, primary_key=True)
exchange_exchange = db.Column(db.Integer, primary_key=True)
exchange_area_code_pk = db.Column(db.Integer, primary_key=True)
exchange = db.relationship('Exchange', backref=db.backref('phone_numbers', lazy='dynamic'))

关于python - 如何为具有复合主键的表创建外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com