2017-06-18 8 views
0

私は継承モデルとsqlAlchemy、flaskとflask_sqlalchemyを処理しようとしています。Flask SqlAlchemy:sqlalchemy.orm.exc.UnmappedInstanceError:クラス 'ApiAgent'がマップされていません

次のコードが動作している場合は、インライン:

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} 

populate.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() 

しかし、私は2つのファイルに分割する場合には機能しdoesntの:

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} 

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} 

私は以下のようなメッセージだ

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() 

populate.py:

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

私は、SQL錬金術を壊しましたか? (私はsqliteを使用しています)

+0

コードを正しくコピーしていないと思います。 'WFAgent'が定義されていないので、' api_agent.py'に 'NameError'があるはずです。 – univerio

+0

そうです。コードを更新します。 – Kayf

答えて

0

これが完成しました! Univerioのおかげで、私はこれが

from agent.wf_agent import WFAgent 

しかし

from .wf_agent import WFAgent 

はokです動作しません、私のインポート

チェック!

理由を理解していない...インポートの仕組みを理解する必要があります。

関連する問題