[英]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.