2016-07-19 5 views
-1

Ok Flaskとsqlalchemyに基づく安らかなAPIアプリケーションを使用して既存のmysqlデータベーステーブルに新しい行を挿入しようとしています。私はそれが着信http POST要求から値を取得し、POST要求から受け取った値で指定されたデータベースの "オブジェクト"テーブルに新しい行を作成します。フラスコとsqlalchemyを使用して既存のmysqlデータベーステーブルに挿入する方法

注:アプリはのhttpd ApacheサーバでWSGIのセットアップを経由して実行されている(セントOS 6.6)

意図したように安らかなAPIの一部が動作しますが、私はSQLAlchemyの部分の周りに私の頭を取得するように見えることはできません。私は初心者のための明確な具体的な助言が必要です。

以下のサンプルコードは、(8、このサンプルコードでのみ2、実際に私の実際のコードで8つのparamsはある)読み出し線30にエラーが発生します。

「はTypeError:INIT()がかかり正確に1つの議論(与えられた8) "

私が間違っていることを確信していません...申し訳ありませんコードは長いです、あなたはスクロールする必要があります。

#! usr/bin/python 
from flask import Flask, jsonify, request 
from flask_restful import reqparse, abort, Resource, Api 
from flask_sqlalchemy import SQLAlchemy 
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, Text, DateTime, ForeignKey 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship, backref, scoped_session, sessionmaker 

app = Flask(__name__) 
api = Api(app) 

engine = create_engine('mysql+pymysql://user_name:[email protected]:3306/database', echo=True) 
Base = declarative_base() 
metadata = MetaData() 
Base.metadata.reflect(engine) 

class Object(Base): 
    __table__ = Table('object', metadata, autoload = True, autoload_with=engine) 

class submitObject(Resource): 
    def post(self): 

     request_data = request.get_json(force=True) 

     r_object_id = request_data['object_id'] 
     r_object_name = request_data['object_name'] 

     r_object_json = jsonify(object_id=r_object_id, object_name=r_object_name) 

     r_object_row = Object(r_object_id, r_object_name) 

     db_session = scoped_session(sessionmaker(bind=engine)) 

     db_session.add(r_object_row) 
     db_session.commit() 
     db_session.remove() 

     return r_ticket_json 

api.add_resource(submitObject, '/object/submit') 

if __name__ == "__main__": 
    app.debug = True 
    app.run() 

ご協力いただければ幸いです!

+2

行48行である

私はこのからライン30を変えましたか?このスニペットには48行はありません。 – Plasma

+0

私はあなたがオブジェクトを作成する方法がそれと関係があると感じています。行 'r_object_row = Object(..、..)'を見てください。私はどこにでもテーブルのスキーマを定義しているとは思わない。スキーマがなければ、データを入れようとしているときにORMが叫んでいるのがわかります。 – Vasif

+0

デバッグのヘルプを求めるときは、完全なトレースバックを含めてください。 –

答えて

1

解決方法は、クラスのインスタンス化方法を変更することでした。これに

r_object_row = Object(r_object_id, r_object_name) 

r_object_row = Object() 

r_object_row.id = r_object_id 
r_object_row.name = r_object_name 
関連する問題