2016-09-12 3 views
1

Ich entwickle eine API, die Einträge von einer Datenbank zurückgibt. Ich benutze Flask-SQLAlchemy, Flask-Marshmallow, Flask-Admin und Docker, um alles zu verpacken.Problem mit Flask-Marshmallow, das DB-Inhalt über API freigibt

In einer Datei Packages.py habe ich den folgenden Code in Bezug auf die Datenbank. Die Klasse PckagesSchema ist die Klasse, die ich hinzugefügt habe, als ich versucht habe, Flash-Marshmallow zum Laufen zu bringen.

class Packages(db.Model): 
    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    trackingnumber = db.Column(db.String(15)) 
    email = db.Column(db.String(80)) 
    localid = db.Column(db.String(80)) 

class PackagesSchema(ma.ModelSchema): 
    class Meta: 
     model = Packages 

Der in der Hauptdatei habe ich folgenden Code-Schnipsel

from app.models import Packages, PackagesSchema 
packages_schema = PackagesSchema() 
db.create_all() 

und dann weiter unten in den Teilen, die mit API GET-Anforderungen befassen.

@app.route('/packages', methods=['GET']) 
def get_packages(): 
    result = packages_schema.dump(Packages).data 
    return jsonify(result) 

im Moment diese zurück:

{ 
    "email": "Packages.email", 
    "localid": "Packages.localid", 
    "trackingnumber": "Packages.trackingnumber" 
} 

Allerdings gibt auf jeden Fall etwas in der Datenbank als die Flask-Admin App seine zeigt.

Dies ist mein erster Tag mit Flask-Marshmallow arbeiten, so bin ich überhaupt nicht so erfahren und würde jede Hilfe zu schätzen wissen. Ich habe gelesen https://flask-marshmallow.readthedocs.io/en/latest/ aber immer noch fest.

+0

Ich denke, dieser Teil: result = 'packages_schema.dump (Packages) .data' muss eine Abfrage in der Klammer sein. Also vielleicht so etwas wie 'packages_schema.dump (Packages.query.all()). Data'. – GMarsh

+0

BTW. Konvention ist für Tabellennamen Singular. Sie könnten also den Klassennamen in Ihrem Modell von "Pakete" in "Paket" ändern. – GMarsh

Antwort

0

ich gebürstet nur ein wenig auf Eibisch up:

@app.route('/packages', methods=['GET']) 
def get_packages(): 
    packages = Packages.query.all() 
    result = packages_schema.dump(packages).data 
    return jsonify(result) 

Sie sollte alles geben dort. Wenn Sie viele Datensätze zurückgeben, müssen Sie packages_schema = PackagesSchema(many=True) hinzufügen.

Auch nicht sicher, welche Version von Kolben Sie laufen ... aber vor der neuesten Version, ich denke nicht, dass Jsonify hier arbeiten würde, da Sie es nicht auf einer Liste nennen konnten. Juts a heads up.

+0

Vielen Dank für den Rat. Ich habe es jetzt funktioniert mit Ihrem aktualisierten Code. Es stellte sich heraus, dass 'packages_schema = PackagesSchema (viele = True) 'sehr wichtig war! Ich werde auch die Tabellennamen ändern. Danke noch einmal. –