

sqlalchemyを使ってデータ登録をするメソッドを書きましたが、  
外部キーの設定周りでエラーが出てしまいます。

なお、Belongクラスのidを、Pageクラスで外部キーとして呼び出しています。

▼POSTができるようにしたい※GET：データ取得はできました  
a.py※一部抜粋

[code]

    class PageRepository():
        def __init__(self,url):
            engine = create_engine(url)
            #Base = declarative_base()
            Session = sessionmaker(bind=engine)
            self.session = Session()
    
        #ページ登録
        def post(self,title,belong_id):
           now_time = datetime.now()
           page = Page(id=null, title=title, belong_id=belong_id, created_at=now_time, updated_at=now_time)
    
           self.session.add(page)
           self.session.commit()
    
    page_repository = PageRepository(access_point)
    page_repository.post('flaskテスト',1)
    
[/code]

→ `python a.py` とすると、エラーが発生します。

エラー

[code]

    sqlalchemy.exc.NoReferencedColumnError: Could not initialize target column for ForeignKey 'belong.id' on table 'page': table 'belong' has no column named 'id'
    
[/code]

b.py※一部抜粋

[code]

    engine = create_engine(access_point, echo=True)
    Base = declarative_base()
    
    class Belong(Base):
        __tablename__ = 'belong'
    
        id = Column('belong_id', Integer, primary_key=True)
        #pages = relationship('Page', backref="belong.id")
        pages = relationship('Page')
    
    Base.metadata.create_all(engine)
    
    
    class Page(Base):
        __tablename__ = 'page'
    
        id = Column('page_id', Integer, primary_key=True)
        title = Column('title', String(200))
        belong_id = Column('belong_id', Integer, ForeignKey('belong.id', onupdate="CASCASE", ondelete="CASCASE"))
        created_at = Column(DateTime)
        updated_at = Column(DateTime)
    
    Base.metadata.create_all(engine)
    
[/code]

色々と確認してみましたが分からず・・・  
どの様に確認していけば良いかといった方法も教えていただけると嬉しいです。  
よろしくお願いいたします。


CC BY-SA 4.0
2018-11-16T12:38:23.903
50384
2019-04-11T01:38:38.190
2019-04-11T01:38:38.190
754
30649
question
python mysql orm sqlalchemy
sqlalchemyの外部キーについて


エラーメッセージには、テーブル'belong'には'id'という名前の列が存在しない（`table 'belong' has no column named
'id'`）とあります。

クラス'Belong'をみると、次のように列名を'belong_id'と定義しています。

[code]

    id = Column('belong_id', Integer, primary_key=True)
    
[/code]

テーブル'belong'には'id'という名前の列はなく'belong_id'という名前の列になっているので、クラス'Page'のコードで'belong_id'の記述を以下のように修正します。

[code]

    belong_id = Column('belong_id', Integer, ForeignKey('belong.belong_id', onupdate="CASCASE", ondelete="CASCASE"))
    
[/code]

または、クラス'Belong'の方の定義を次のように修正します。普通はこちらにすると思います。

[code]

    id = Column(Integer, primary_key=True)
    
[/code]

確認の方法ですが、エラーメッセージをよく読むことです。


CC BY-SA 4.0
2018-11-17T01:52:02.160
50389
2018-11-17T01:52:02.160
15171
50384
answer