首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-SQLAlchemy关系错误

Flask-SQLAlchemy关系错误
EN

Stack Overflow用户
提问于 2020-05-14 02:43:39
回答 2查看 251关注 0票数 0

我正在建立一个与Flask和SQLAlchemy的应用程序接口,并已创建了2个表之间的关系。当我运行项目时,所有的工作似乎都很好,当通过python manage.py test运行时,测试也可以工作,但是如果我使用PyTest命令或通过PyCharm运行测试,那么它会抛出初始化映射器的错误。关系是能够使用teams名称获取Search对象上的所有SearchTeams

错误是:

代码语言:javascript
复制
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.

这些模型包括:

搜索:

代码语言:javascript
复制
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

SearchTeam:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-14 08:22:05

在深入研究之后,我能够通过简单地将SearchTeam模型导入到Search模型中来实现这一点。

不是100%确定为什么/如何修复它,因为我使用过类似关系的其他项目不需要这样做,但它现在起作用了,这是主要的事情。

票数 0
EN

Stack Overflow用户

发布于 2020-05-14 04:42:18

你可以将backref改为'searches‘。另请参阅https://docs.sqlalchemy.org/en/13/orm/backref.html

代码语言:javascript
复制
teams = db.relationship('SearchTeam', backref='search')
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61782453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档