Python Flask SQLAlchemy-声明关系时未找到模型

Python Flask SQLAlchemy-声明关系时未找到模型,python,flask,orm,sqlalchemy,flask-sqlalchemy,Python,Flask,Orm,Sqlalchemy,Flask Sqlalchemy,在声明两个模型(存储在两个单独的文件中)之间的关系时,出现以下错误: ERROR: sqlalchemy.exc.InvalidRequestError: When initializing mapper mapped class FrequencyBand->frequency_bands_table, expression 'LicenseItem' failed to locate a name ('LicenseItem'). If this is a class name, co

在声明两个模型(存储在两个单独的文件中)之间的关系时,出现以下错误:

ERROR: sqlalchemy.exc.InvalidRequestError: When initializing mapper mapped class FrequencyBand->frequency_bands_table, expression 'LicenseItem' failed to locate a name ('LicenseItem'). If this is a class name, consider adding this relationship() to the <class 'src.models.metaData.FrequencyBand'> class after both dependent classes have been defined.
因为我在flask应用程序中使用名称空间和蓝图,所以模型在名称空间中导入,蓝图通过应用程序工厂模式注册

from flask import Blueprint
from flask_restx import Api
from .meta_data import ns as meta_data_ns
from .projects import ns as projects_ns


api_blueprint = Blueprint('api', __name__)
api = Api(api_blueprint)

api.add_namespace(meta_data_ns, path='/meta')
api.add_namespace(projects_ns, path='/projects')

在类
FrequencyBand
中,属性
license
对错误负责

license=db.relationship(“LicenseItem”)抛出错误
您必须删除此行,并在以后声明它,即完全按照错误消息所述执行。例如:

#在声明LicenseItem之前导入FrequencyBand
从flask_restx导入命名空间,资源
从src.models.metaData导入频率带
从src.models.item导入项,Allitemschema
从src.models.utils导入令牌\u必需
FrequencyBand.license=db.relationship(“LicenseItem”)
这不是一个非常优雅的解决方案,但可能适合这个特定的用例(我真的不能说)


出现此问题的原因是类中有两个依赖关系。如果您只想声明多对多关系,请使用帮助表查看上的。

在类
频率带
中,属性
许可证
负责此错误

license=db.relationship(“LicenseItem”)抛出错误
您必须删除此行,并在以后声明它,即完全按照错误消息所述执行。例如:

#在声明LicenseItem之前导入FrequencyBand
从flask_restx导入命名空间,资源
从src.models.metaData导入频率带
从src.models.item导入项,Allitemschema
从src.models.utils导入令牌\u必需
FrequencyBand.license=db.relationship(“LicenseItem”)
这不是一个非常优雅的解决方案,但可能适合这个特定的用例(我真的不能说)


出现问题的原因是您的类中有两个依赖关系。如果您只想声明多对多关系,请使用帮助表查看上的。

您可以发布Item类吗?如果没有Item类,您的代码对我有效。感谢您的支持。我添加了Item类。我还意识到db是炼金术(不是炼金术,但我知道这两者应该是相同的)。但是,可能联接表继承导致了一些问题?您可以发布Item类吗?如果没有Item类,您的代码将为我工作。感谢您的支持。我添加了Item类。我还意识到db引用的是flask_sqlalchemy(不是sqlalchemy,但我知道这两个应该相同).但可能是联接表继承导致了一些问题?
from flask import Blueprint
from flask_restx import Api
from .meta_data import ns as meta_data_ns
from .projects import ns as projects_ns


api_blueprint = Blueprint('api', __name__)
api = Api(api_blueprint)

api.add_namespace(meta_data_ns, path='/meta')
api.add_namespace(projects_ns, path='/projects')
#meta namespace -> the first namespace which is registered -> and therefore the FrequencyBand is imported before LicenseItem is declared
from flask_restx import Namespace, Resource
from src.models.metaData import FrequencyBand
from src.models.item import Item, AllItemsSchema
from src.models.utils import token_required


ns = Namespace('meta', description='Operations related to meta data')

@ns.route('/')
class UnitObject(Resource):
    @token_required
    def get(self):
    #...
#app.__init__
from flask import Flask
from .extensions import db,...
from src.config import app_config


def create_app(config_name):
    """Create and return app."""
    app = Flask(__name__)
    app.config.from_object(app_config[config_name])
    db.init_app(app)
    marshmallow.init_app(app)
    ...
    with app.app_context():
        from src.api import api_blueprint
        from src.admin_backend.commands import bp as command_bp
        app.register_blueprint(api_blueprint, url_prefix="/api")
        app.register_blueprint(command_bp)
        return app