Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 炼金术关系错误_Python_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 炼金术关系错误

Python 炼金术关系错误,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我正在用Flask和SQLAlchemy构建一个API,并在两个表之间创建了一个关系。当我运行项目时,一切似乎都正常工作,并且当通过python manage.py test运行测试时,测试也正常工作,但是如果我使用PyTest命令或通过PyCharm运行测试,那么初始化映射器时会抛出一个错误。该关系能够使用teams名称获取Search对象上的所有SearchTeams 错误是: sqlalchemy.exc.InvalidRequestError: When initializing map

我正在用Flask和SQLAlchemy构建一个API,并在两个表之间创建了一个关系。当我运行项目时,一切似乎都正常工作,并且当通过
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 SearchTeam(数据库模型):
__tablename_uuuu='搜索团队'
id=db.Column(db.Integer,主键=True)
uuid=db.Column(uuid(as_uuid=True)、unique=True、nullable=False、default=uuid.uuid4)
search\u id=db.Column(db.Integer,db.ForeignKey('searches.id'))
team_leader=db.Column(db.String(255),nullable=False)
medic=db.Column(db.String(255),null=False)
响应程序_1=db.Column(db.String(255),nullable=True)
响应程序_2=db.Column(db.String(255),null=True)
响应程序_3=db.Column(db.String(255),nullable=True)
定义初始(自我、搜索、团队领导、医生、响应者1、响应者2、响应者3):
self.search=搜索
self.team\u leader=团队领导
self.medic=medic
self.responder_1=响应者_1
self.responder_2=响应者_2
self.responder_3=响应者_3

您可以将backref改为“searches”。也看到


经过进一步的挖掘,我能够通过简单地将
SearchTeam
模型导入
Search
模型来实现这一点


无法100%确定为什么/如何修复它,因为我使用过类似关系的其他项目不需要它,但它现在可以工作了,这是最重要的。

这不起作用,事实上这样做会破坏功能。事实证明,我需要将SearchTeam模型导入到搜索模型中。在第一次使用模型(触发配置)之前,SearchTeam是否在任何地方导入了
SearchTeam
。我尝试使用我在其他项目中使用的相同架构,但没有成功。这是常见的问题。SQLA使用某些查找/注册表来处理字符串查找,但为了找到映射类,必须在使用之前构造它。例如,
db.create_all()
使用模型,因此在调用.Intersting之前必须对所有类进行评估。我们将从另一个角度进一步研究它。在这个阶段,我只想让基本函数为API工作,并在以后解决设计问题。感谢您的深入了解,非常合适它看起来像示例代码中的
Search
没有属性
Search
,因此错误消息和模型不匹配100%。
teams = db.relationship('SearchTeam', backref='search')