

flaskでAPIを作成しており、POSTメソッドを実装してみたところ、下記のようなエラーが発生しましたが、解決できず困っています。

  * エラー内容

[code]

    sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`mydb`.`page`, CONSTRAINT `page_ibfk_1` FOREIGN KEY (`belong_id`) REFERENCES `belong` (`id`))') [SQL: 'INSERT INTO page (id, title, belong_id, created_at, updated_at) VALUES (%s, %s, %s, %s, %s)'] [parameters: (0, 'test', '', datetime.datetime(2019, 1, 2, 6, 16, 56, 752822), datetime.datetime(2019, 1, 2, 6, 16, 56, 752822))] (Background on this error at: http://sqlalche.me/e/gkpj)
    127.0.0.1 - - [02/Jan/2019 06:16:56] "POST /pages?title=test HTTP/1.1" 500 -
    
[/code]

  * flask POSTメソッド実装部分

[code]

    @app.route('/pages',methods=['POST'])
    def post_page():
        title = request.args.get('title','')
        belong_id = request.args.get('belong_id','')
        page_repository = PageRepository(access_point)
        page = page_repository.post(title,belong_id)
    
[/code]

  * 実行内容

[code]

     curl -X POST -H "Content-Type: application/json" http://0.0.0.0:8080/pages?belong_id=1&title;=test
    
[/code]

  * o/rマッパー部分抜粋

[code]

    class Relation(Base):
        __tablename__ = 'relation'
        id = Column('id', Integer, primary_key=True)
        code_link = Column('code_link', Text)
        memo = Column('memo', Text)
    
    class Belong(Base):
        __tablename__ = 'belong'
        id = Column('id', Integer, primary_key=True)
        relation_order = Column('relation_order', Integer, ForeignKey('relation.id', onupdate="CASCASE", ondelete="CASCASE"))
        page = relationship('Page')
    
    Base.metadata.create_all(engine)
    
    class Page(Base):
        __tablename__ = 'page'
        id = Column('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)
    
[/code]

relationテーブル、belongテーブルにはそれぞれ1レコード（id=1）データがそれぞれ既に入っています。  
また、最初に入れていたデータがおかしいのかと思い、一度テーブルを削除、作り直しをしてデータを入れ直してもみましたが、同じエラーが発生しています。

恐れ入りますが何かご教授いただけますと幸いです。  
よろしくお願いいたします。


CC BY-SA 4.0
2019-01-02T06:32:52.770
51659
2019-01-04T14:46:12.370
30649
question
mysql api flask
flaskでpostメソッドを実施すると外部キー制約周りでエラーが発生する


エラー内容を見る限り、以下のクエリが発行されています。

[code]

    INSERT INTO page (
        id, 
        title, 
        belong_id, 
        created_at, 
        updated_at
    ) 
    VALUES (
        0, 
        'test', 
        '',        # ここが空
        '2019 01/02 ...',
        '2019 01/02 ...'
    );
    
[/code]

`belong_to` の値が空でMySQLの外部キー制約に反するためにINSERTができないのだと思われます。


CC BY-SA 4.0
2019-01-04T14:46:12.370
51707
2019-01-04T14:46:12.370
31669
51659
answer