首页 > 解决方案 > 如何修复 sqlalchemy.exc.NoForeignKeysError 并改进我的 models.py

问题描述

我目前正在练习flask-sqlalchemy,这是我的models.py,我是新手,所以请帮我找到问题

from main import db

CharacterConstellation = db.Table('CharacterConstellation', db.Model.metadata,
                        db.Column('Character_id', db.Integer, db.ForeignKey('Character.id')),
                        db.Column('Constellation_id', db.Integer, 
                        db.ForeignKey('Constellation.id'))
                        )


CharacterPassive = db.Table('CharacterPassive', db.Model.metadata,
                    db.Column('Character_id', db.Integer, db.ForeignKey('Character.id')),
                    db.Column('Passive_id', db.Integer, db.ForeignKey('Passive.id'))
                    )


CharacterTalent = db.Table('CharacterTalent', db.Model.metadata,
                db.Column('Character_id', db.Integer, db.ForeignKey('Character.id')),
                db.Column('Talent_id', db.Integer, db.ForeignKey('Talent.id'))
                )


class Character(db.Model):
    __tablename__ = 'Character'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    description = db.Column(db.String())
    allegiance = db.Column(db.String())
    region = db.Column(db.String())
    vision = db.Column(db.String())
    weapon = db.Column(db.String())
    description = db.Column(db.Text())


constellations = db.relationship("Constellation", secondary=CharacterConstellation, back_populates='characters')
passives = db.relationship("Passive", secondary=CharacterPassive, back_populates='characters')
talents = db.relationship('Talent', secondary=CharacterTalent, back_populates='characters')


class Constellation(db.Model):
    ___tablename__ = 'Constellation'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    description = db.Column(db.Text())

characters = db.relationship('Character', secondary=CharacterConstellation, back_populates='constellations')

class Passive(db.Model):
    __tablename__ = 'Passive'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    description = db.Column(db.Text())

characters = db.relationship('Character', secondary=CharacterPassive, back_populates='passives')


class Talent(db.Model):
    __tablename__ = 'Talent'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    description = db.Column(db.Text())

characters = db.relationship('Character', secondary=CharacterTalent, back_populates='talents')

这就是我现在遇到的问题:

sqlalchemy.exc.NoForeignKeysError:无法确定关系 Character.constellations 上的父/子表之间的连接条件 - 没有通过辅助表“CharacterConstellation”链接这些表的外键。确保引用列与 ForeignKey 或 ForeignKeyConstraint 相关联,或指定“primaryjoin”和“secondaryjoin”表达式。

标签: flask-sqlalchemyflask-wtforms

解决方案


推荐阅读