2017-03-17 1 views
0

Ich habe gerade ein Problem bei der Implementierung von Flask-SQLAlchemy in meinem Flask-Restplus. Es zeigen durchweg einen Fehler:sqlalchemy.orm.exc.UnmappedInstanceError: Klasse '__main __. Benutzer' ist nicht auf Flask-SQLAlchemy gemappt

sqlalchemy.orm.exc.UnmappedInstanceError: Class '__main__.User' is not mapped 

Der Code, den ich unten geschrieben habe, ist die vereinfachte Version (1 Datei) des Flask-Restplus Beispielprojekt auf GitHub: https://github.com/postrational/rest_api_demo

Ich habe immer wieder überprüft , aber habe keine Ahnung warum der Fehler immer noch auftritt.

Hier ist mein Code:

from flask import Flask, request 
from flask_sqlalchemy import SQLAlchemy 
from flask_restplus import Resource, Api, fields 

app = Flask(__name__) 
api = Api(app, version='v0.1') 
db = SQLAlchemy(app) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db' 
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 
db.init_app(app) 

ns = api.namespace('users', description='User API') 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(80)) 
    password = db.Column(db.String(80)) 

    def __init__(self, email, password): 
     self.email = email 
     self.password = password 

    def __repr__(self): 
     return '<User %s>' % self.email 


user = api.model('user', { 
    "id": fields.Integer(readOnly=True), 
    "email": fields.String(required=True), 
    "password": fields.String(required=True), 
}) 


def create_user(data): 
    email = data.get('email') 
    password = data.get('password') 

    user = User(email, password) 

    db.session.add(user) 
    db.session.commit() 

def update_user(user_id, data): 
    user = User.query.filter(User.id == user_id).first() 
    user.email = data.get('email') 
    user.password = data.get('password') 

    db.session.add(user) 
    db.session.commit() 

def delete_user(user_id): 
    user = User.query.filter(User.id == user_id).first() 

    db.session.delete(user) 
    db.session.commit() 


@ns.route('/') 
class UserList(Resource): 
    @ns.marshal_list_with(user) 
    def get(self): 
     users = User.query.all() 
     return users 

    @ns.marshal_with(user) 
    @ns.expect(user) 
    def post(self): 
     data = request.json 
     create_user(data) 
     return None, 201 

@ns.route('/<int:id>') 
class User(Resource): 
    @ns.marshal_with(user) 
    def get(self, id): 
     user = User.query.filter(User.id == id).first() 
     return user 

    @ns.expect(user) 
    @ns.marshal_with(user) 
    def put(self, id): 
     data = request.json 
     user = update_user(id, data) 
     return None, 204 

    def delete(self, id): 
     delete_user(id) 
     return None, 204 


db.create_all() 

user = User(email= '[email protected]', password= '4324dsfdsfa') 
db.session.add(user) 
db.session.commit() 

user = User(email= '[email protected]', password= '5435rs') 
db.session.add(user) 
db.session.commit() 

users = User.query.all() 
print users 

if __name__ == "__main__": 

    app.run(debug=True) 

Gibt es etwas, das ich auf dem Code verpasst? Ich benutze python2.7 sowieso ..

Antwort

0

im ziemlich sicher sein, weil Sie User.__init__ sind Überlastung, aber man super nur knapp sein Ziel zu nennen, so tun dies und sehen, ob es Karten:

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(80)) 
    password = db.Column(db.String(80)) 

    def __init__(self, email, password): 
     self.email = email 
     self.password = password 
     super(User,self).__init__() 

    def __repr__(self): 
     return '<User %s>' % self.email 
+0

ich einfach super auf genannt habe Mein Modell init, aber es scheint, als ob es nicht funktioniert hat. Ich habe versucht, ein neues Projekt mit neuen Modellen zu erstellen, es funktioniert. Hab keine Ahnung was hier passiert – rizkiaditya24

Verwandte Themen