我正在建立一个与Flask和SQLAlchemy的应用程序接口,并已创建了2个表之间的关系。当我运行项目时,所有的工作似乎都很好,当通过python manage.py test运行时,测试也可以工作,但是如果我使用PyTest命令或通过PyCharm运行测试,那么它会抛出初始化映射器的错误。关系是能够使用teams名称获取Search对象上的所有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 = scribeSearchTeam:
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发布于 2020-05-14 08:22:05
在深入研究之后,我能够通过简单地将SearchTeam模型导入到Search模型中来实现这一点。
不是100%确定为什么/如何修复它,因为我使用过类似关系的其他项目不需要这样做,但它现在起作用了,这是主要的事情。
发布于 2020-05-14 04:42:18
你可以将backref改为'searches‘。另请参阅https://docs.sqlalchemy.org/en/13/orm/backref.html
teams = db.relationship('SearchTeam', backref='search')https://stackoverflow.com/questions/61782453
复制相似问题