Python 烧瓶SqlAlchemy:SqlAlchemy.orm.exc.unappedInstanceError:Class';ApiAgent';未映射

Python 烧瓶SqlAlchemy:SqlAlchemy.orm.exc.unappedInstanceError:Class';ApiAgent';未映射,python,inheritance,flask,sqlalchemy,Python,Inheritance,Flask,Sqlalchemy,我尝试处理继承模型和sqlAlchemy、flask和FlaskSqlAlchemy 如果是内联的,则以下代码正常工作: wf_agent.py from app import db class WFAgent(db.Model): __tablename__ = 'wf_agent' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), index=True, uniq

我尝试处理继承模型和sqlAlchemy、flask和FlaskSqlAlchemy

如果是内联的,则以下代码正常工作:

wf_agent.py

from app import db
class WFAgent(db.Model):
    __tablename__ = 'wf_agent'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True, unique=True)
    agent_type = db.Column(db.String(50), nullable=False)

    __mapper_args__ = {'polymorphic_on': agent_type,
                   'polymorphic_identity': 'wf_agent'}
    __table_args__ = {'extend_existing': True}

class ApiAgent(WFAgent):
    __tablename__ = 'wf_agent'
    __mapper_args__ = {'polymorphic_identity': 'api_agent'}

    api_key = db.Column(db.String(1024))
    token = db.Column(db.String(1024))

    __table_args__ = {'extend_existing': True}
from app import db
class WFAgent(db.Model):
    __tablename__ = 'wf_agent'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True, unique=True)
    agent_type = db.Column(db.String(50), nullable=False)

    __mapper_args__ = {'polymorphic_on': agent_type,
                   'polymorphic_identity': 'wf_agent'}
    __table_args__ = {'extend_existing': True}
填充.py

from app import db

from app.models.agent.wf_agent import  WFAgent, ApiAgent

db.drop_all()
db.configure_mappers()
db.create_all()
db.session.commit()


api_agent = WFAgent(name="agent 1")
db.session.add(api_agent)

api_agent = ApiAgent(name="agent 2")
db.session.add(api_agent)

db.session.commit()
from app import db

from app.models.agent.wf_agent import  WFAgent
from app.models.agent.api_agent import  ApiAgent

db.drop_all()
db.configure_mappers()
db.create_all()
db.session.commit()


api_agent = WFAgent(name="test")
db.session.add(api_agent)

api_agent = ApiAgent(name="test")
db.session.add(api_agent)

db.session.commit()
但如果我将其拆分为两个文件,则无法正常工作:

wf_agent.py

from app import db
class WFAgent(db.Model):
    __tablename__ = 'wf_agent'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True, unique=True)
    agent_type = db.Column(db.String(50), nullable=False)

    __mapper_args__ = {'polymorphic_on': agent_type,
                   'polymorphic_identity': 'wf_agent'}
    __table_args__ = {'extend_existing': True}

class ApiAgent(WFAgent):
    __tablename__ = 'wf_agent'
    __mapper_args__ = {'polymorphic_identity': 'api_agent'}

    api_key = db.Column(db.String(1024))
    token = db.Column(db.String(1024))

    __table_args__ = {'extend_existing': True}
from app import db
class WFAgent(db.Model):
    __tablename__ = 'wf_agent'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True, unique=True)
    agent_type = db.Column(db.String(50), nullable=False)

    __mapper_args__ = {'polymorphic_on': agent_type,
                   'polymorphic_identity': 'wf_agent'}
    __table_args__ = {'extend_existing': True}
api_agent.py

from app import db
from agent.wf_agent import WFAgent

class ApiAgent(WFAgent):
    __tablename__ = 'wf_agent'
    __mapper_args__ = {'polymorphic_identity': 'api_agent'}

    api_key = db.Column(db.String(1024))
    token = db.Column(db.String(1024))

    __table_args__ = {'extend_existing': True}
填充.py

from app import db

from app.models.agent.wf_agent import  WFAgent, ApiAgent

db.drop_all()
db.configure_mappers()
db.create_all()
db.session.commit()


api_agent = WFAgent(name="agent 1")
db.session.add(api_agent)

api_agent = ApiAgent(name="agent 2")
db.session.add(api_agent)

db.session.commit()
from app import db

from app.models.agent.wf_agent import  WFAgent
from app.models.agent.api_agent import  ApiAgent

db.drop_all()
db.configure_mappers()
db.create_all()
db.session.commit()


api_agent = WFAgent(name="test")
db.session.add(api_agent)

api_agent = ApiAgent(name="test")
db.session.add(api_agent)

db.session.commit()
我得到了以下信息:

sqlalchemy.orm.exc.UnmappedInstanceError: Class 'app.models.agent.api_agent.ApiAgent' is not mapped

我打破了Sql炼金术了吗?(我正在使用sqlite)

明白了!感谢Univerio,我检查了我的进口

这不管用

from agent.wf_agent import WFAgent
但是

没关系


不知道为什么。。。我需要更好地理解导入的工作原理:)

明白了!感谢Univerio,我检查了我的进口

这不管用

from agent.wf_agent import WFAgent
但是

没关系


不知道为什么。。。我需要更好地理解导入的工作原理:)

我认为您复制的代码不正确。您应该在
api_agent.py
中得到
namererror
,因为未定义
WFAgent
。您是对的。我更新了我的代码。我认为你没有正确复制代码。您应该在
api_agent.py
中得到
namererror
,因为未定义
WFAgent
。您是对的。我更新了我的代码。这很简单,因为模型在同一个目录中。如果模型在其他地方,您需要放置完整的虚线路径,该怎么办?这很简单,因为模型位于同一目录中。如果模型在其他地方,您需要放置完整的虚线路径,该怎么办?