2016-07-19 20 views
-1

Ok Ich versuche, eine neue Zeile in eine vorhandene MySQL-Datenbanktabelle mit einer erholsamen API-Anwendung basierend auf Flask und Sqlalchemy einfügen. Ich möchte, dass es die Werte von der eingehenden HTTP-POST-Anfrage übernimmt und dann eine neue Zeile in der "Objekt" -Tabelle der gegebenen Datenbank mit den Werten erzeugt, die von der POST-Anfrage empfangen werden.Wie Einfügen in eine vorhandene MySQL-Datenbank-Tabelle mit Kolben und Sqlalchemy

Hinweis: Die App ist über eine wsgi Setup mit httpd Apache-Server (cent os 6.6) läuft

Der RESTful API Teil wie beabsichtigt funktioniert, aber ich kann meinen Kopf nicht scheinen um den sqlalchemy Teil zu bekommen. Ich brauche einen klaren Rat für einen Anfänger.

Das folgende Codebeispiel verursacht einen Fehler auf der Leitung 30, die lautet (die 8 ist eigentlich die 8 params in meinem eigentlichen Code, nur 2 in diesem Beispielcode):

„Typeerror: init() nimmt genau 1 Argument (8 gegeben) "

Nicht sicher, was ich falsch mache ... Sorry Code ist lang, Sie müssen scrollen.

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

Jede Hilfe wird sehr geschätzt!

+2

Welche Linie ist die Linie 48? Dieses Snippet enthält keine 48 Zeilen. – Plasma

+0

Ich fühle, dass die Art, wie du ein Objekt erstellst, etwas damit zu tun hat. Betrachte die Zeile 'r_object_row = Object (.., ..)'. Ich sehe nicht, dass Sie irgendwo ein Schema für die Tabelle definiert haben. Ohne Schema sehe ich das ORM schreien, wenn Sie versuchen, Daten hinein zu legen. – Vasif

+0

Bitte geben Sie den vollständigen Traceback an, wenn Sie nach Hilfe zum Debuggen gefragt werden. –

Antwort

1

Die Lösung bestand darin, die Art zu ändern, in der die Klasse instanziiert wurde.

Ich änderte Linie 30 von dieser:

r_object_row = Object(r_object_id, r_object_name) 

dazu:

r_object_row = Object() 

r_object_row.id = r_object_id 
r_object_row.name = r_object_name