繁体   English   中英

Flask-SQLAlchemy 关系错误

[英]Flask-SQLAlchemy Relationship errors

我正在使用 Flask 和 SQLAlchemy 构建 API 并在 2 个表之间创建了关系。 当我运行该项目时,一切似乎都工作正常,并且通过python manage.py test运行时测试也正常工作,但是如果我使用 PyTest 命令或通过 PyCharm 运行测试,则它会抛出初始化映射错误。 关系是能够使用teams名称在Search object 上获取所有SearchTeams

错误是:

sqlalchemy.exc.InvalidRequestError: When initializing mapper mapped class Search->searches, expression 'SearchTeam' failed to locate a name ('SearchTeam'). If this is a class name, consider adding this relationship() to the <class 'app.models.Search.Search'> class after both dependent classes have been defined.

这些型号是:

搜索:

class Search(db.Model):
    __tablename__ = 'searches'

    id = db.Column(db.Integer, primary_key=True)
    uuid = db.Column(UUID(as_uuid=True), unique=True, nullable=False, default=uuid.uuid4)
    location = db.Column(db.String(255), nullable=False)
    date = db.Column(db.Date, default=datetime.today)
    start_time = db.Column(db.String(10), nullable=False)
    end_time = db.Column(db.String(10), nullable=True)
    type = db.Column(db.String(255))
    oic = db.Column(db.String(255))
    sm = db.Column(db.String(255))
    so = db.Column(db.String(255))
    sl = db.Column(db.String(255))
    ro = db.Column(db.String(255))
    scribe = db.Column(db.String(255))
    notes = db.Column(db.Text)

    teams = db.relationship('SearchTeam', backref='search')

    def __init__(self, location, date, start_time, type, oic, sm, so, sl, ro, scribe):
        self.location = location
        self.date = date
        self.start_time = start_time
        self.type = type
        self.oic = oic
        self.sm = sm
        self.so = so
        self.sl = sl
        self.ro = ro
        self.scribe = scribe

搜索团队:

class SearchTeam(db.Model):
    __tablename__ = 'search_teams'

    id = db.Column(db.Integer, primary_key=True)
    uuid = db.Column(UUID(as_uuid=True), unique=True, nullable=False, default=uuid.uuid4)
    search_id = db.Column(db.Integer, db.ForeignKey('searches.id'))
    team_leader = db.Column(db.String(255), nullable=False)
    medic = db.Column(db.String(255), nullable=False)
    responder_1 = db.Column(db.String(255), nullable=True)
    responder_2 = db.Column(db.String(255), nullable=True)
    responder_3 = db.Column(db.String(255), nullable=True)

    def __init__(self, search, team_leader, medic, responder_1, responder_2, responder_3):
        self.search = search
        self.team_leader = team_leader
        self.medic = medic
        self.responder_1 = responder_1
        self.responder_2 = responder_2
        self.responder_3 = responder_3

经过更多的挖掘,我只需将SearchTeam model 导入到Search model 中就可以完成这项工作。

不是 100% 确定为什么/如何修复它,因为我使用类似关系的其他项目不需要这个,但它现在正在工作,这是主要的。

您可以改为将 backref 更改为“搜索”。 另请参阅https://docs.sqlalchemy.org/en/13/orm/backref.html

teams = db.relationship('SearchTeam', backref='search')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM