Python中的两个关联表+;烧瓶炼金术
我正在尝试创建一个族谱,但是数据模型有点问题。我有一个表,它需要以两种方式引用自身,一种用于父子关系,另一种用于配偶关系。我尝试了下面的代码,但得到一个错误: sqlalchemy.exc.norReferencedTableError:与关联的外键 列“partners.so2_id”找不到要与之关联的表“member” 为目标列“member\u id”生成外键 有人会有指导吗?我试图继续读文档,但有点迷路了。谢谢你能给予的任何帮助Python中的两个关联表+;烧瓶炼金术,python,flask-sqlalchemy,Python,Flask Sqlalchemy,我正在尝试创建一个族谱,但是数据模型有点问题。我有一个表,它需要以两种方式引用自身,一种用于父子关系,另一种用于配偶关系。我尝试了下面的代码,但得到一个错误: sqlalchemy.exc.norReferencedTableError:与关联的外键 列“partners.so2_id”找不到要与之关联的表“member” 为目标列“member\u id”生成外键 有人会有指导吗?我试图继续读文档,但有点迷路了。谢谢你能给予的任何帮助 from flask_sqlalchemy import
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# association table for parents<->children
children = db.Table('children',
db.Column('child_id', db.Integer, db.ForeignKey('member.member_id')),
db.Column('parent_id', db.Integer, db.ForeignKey('member.member_id'))
)
# association table for spouses
spouses = db.Table('spouses',
db.Column('so1_id', db.Integer, db.ForeignKey('member.member_id')),
db.Column('so2_id', db.Integer, db.ForeignKey('member.member_id'))
)
class Member(db.Model):
"""Node within the family tree."""
__tablename__ = "members"
member_id = db.Column(db.Integer, autoincrement=True, primary_key=True)
first_name = db.Column(db.String(60), nullable=False)
last_name = db.Column(db.String(40), nullable=False)
eng_title = db.Column(db.String(20), nullable=True)
alt_name = db.Column(db.String(50), nullable=True)
lineage = db.Column(db.String(15), nullable=True)
deceased = db.Column(db.Boolean, nullable=True)
image_url = db.Column(db.String(80), nullable=True)
parents = db.relationship('Member',
secondary=children,
primaryjoin=(children.c.child_id == member_id),
secondaryjoin=(children.c.parent_id == member_id),
backref=db.backref('children', lazy='dynamic'),
lazy='dynamic')
spouse = db.relationship('Member',
secondary=spouses,
primaryjoin=(spouses.c.so1_id == member_id),
secondaryjoin=(spouses.c.so2_id == member_id),
backref=db.backref('spouses', lazy='dynamic'),
lazy='dynamic')
从flask\u sqlalchemy导入sqlalchemy
db=SQLAlchemy()
#parentschildren关联表
children=db.Table('children',
db.Column('child\u id',db.Integer,db.ForeignKey('member.member\u id')),
db.Column('parent\u id',db.Integer,db.ForeignKey('member.member\u id'))
)
#配偶关联表
配偶=数据库表(‘配偶’,
db.Column('so1_id',db.Integer,db.ForeignKey('member.member_id')),
db.Column('so2\u id',db.Integer,db.ForeignKey('member.member\u id'))
)
类成员(db.Model):
“”“族树中的节点。”“”
__tablename_=“成员”
member\u id=db.Column(db.Integer,autoincrement=True,primary\u key=True)
first_name=db.Column(db.String(60),nullable=False)
last_name=db.Column(db.String(40),nullable=False)
eng_title=db.Column(db.String(20),nullable=True)
alt_name=db.Column(db.String(50),nullable=True)
沿袭=db.Column(db.String(15),nullable=True)
deased=db.Column(db.Boolean,nullable=True)
image\u url=db.Column(db.String(80),nullable=True)
父项=数据库关系('成员',
中学=儿童,
primaryjoin=(children.c.child_id==成员_id),
secondaryjoin=(children.c.parent_id==成员_id),
backref=db.backref('children',lazy='dynamic'),
(动态的)
配偶=db.关系(“成员”,
次要=配偶,
primaryjoin=(partners.c.so1_id==成员_id),
secondaryjoin=(partners.c.so2_id==成员_id),
backref=db.backref('partners',lazy='dynamic'),
(动态的)
您在ForeignKey
引用中使用了错误的表名-应该是db.ForeignKey('members.member_id')
,因为这是您为member
@SeanVieira Aha!定义的表名!我真傻。这似乎解决了问题。谢谢很高兴我能帮忙-欢迎来到StackOverflow!您在ForeignKey
引用中使用了错误的表名-它应该是db.ForeignKey('members.member_id')
,因为这是您为member
@SeanVieira Aha>定义的表名!我真傻。这似乎解决了问题。谢谢很高兴我能帮忙-欢迎来到StackOverflow!