2017-01-10 28 views
2

SQLAlchemyの外部キーとリレーションシップの周りに頭を悩ませています。私は自分のデータベースに2つのテーブルを持っています。最初のものはRequestであり、2番目のものはAgentです。各Requestは、1つのAgentを含み、各Agentは、1つのRequestを有する。フラスコSQLAlchemy外部キーの関係

class Request(db.Model): 
    __tablename__ = 'request' 
    reference = db.Column(db.String(10), primary_key=True) 
    applicationdate = db.Column(db.DateTime) 
    agent = db.ForeignKey('request.agent'), 

class Agent(db.Model): 
    __tablename__ = 'agent' 
    id =  db.relationship('Agent', backref='request', \ 
    lazy='select') 
    name = db.Column(db.String(80)) 
    company = db.Column(db.String(80)) 
    address = db.Column(db.String(180)) 

私は、私は次のエラー

は、テーブルの上のForeignKey「request.agent」 '申請者のためのターゲット列を初期化できませんでした取得db.create_all()実行しています:テーブルの要求は、' 'という名前の列を持っていませんがエージェント '

答えて

2

SqlAlchemy documentation on OneToOne relationshipsをご覧ください。まず、各モデルにプライマリキーを提供する必要があります。次に、他のモデルの主キーを参照する1つの外部キーを定義する必要があります。関連するモデルへの直接アクセスを可能にするバックリファレンスとの関係を定義することができます。

class Request(db.Model): 
    __tablename__ = 'request' 
    id = db.Column(db.Integer, primary_key=True) 
    applicationdate = db.Column(db.DateTime) 

class Agent(db.Model): 
    __tablename__ = 'agent' 
    id = db.Column(db.Integer, primary_key=True) 
    request_id = Column(Integer, ForeignKey('request.id')) 
    request = relationship("Request", backref=backref("request", uselist=False)) 

    name = db.Column(db.String(80)) 
    company = db.Column(db.String(80)) 
    address = db.Column(db.String(180)) 

今、あなたはこのようなあなたのモデルにアクセスすることができます。

request = Request.query.first() 
print(request.agent.name) 

agent = Agent.query.first() 
print(agent.request.applicationdate) 
関連する問題