【发布时间】:2013-03-07 00:22:30
【问题描述】:
我在弄清楚如何为我正在定义的表正确构建我的 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 表的 ForeignKey,但由于 Exchange 表有一个复合主键,我不知道如何使关系起作用。
任何指导将不胜感激。谢谢。
【问题讨论】:
-
在您的示例中,Exchange 只有一个主键?
exchange列是否也应为primary=True? -
几个值得看的东西:docs.sqlalchemy.org/en/latest/core/…stackoverflow.com/questions/10525797/… 还有,你用的是什么数据库?
-
嗨@shazow,你是对的,我在那里打错字了。 Exchange 有两个主键。另外,我使用的是 PostgreSQL 9.2。
-
你能解释一下“无法弄清楚如何让这种关系发挥作用”的意思吗?你试过什么?您是否在
Relationship中指定了foreign_keys?或者,您可以指定primaryjoin条件。 -
@rdegges:我已经编辑了关于术语的问题。
标签: python sqlalchemy flask-sqlalchemy