2017-03-17 4 views
0

Flask-SQLAlchemyをFlask-Restplusに実装する際に問題が発生しました。 https://github.com/postrational/rest_api_demosqlalchemy.orm.exc.UnmappedInstanceError:Class '__main __。User'がFlask-SQLAlchemyにマップされていません

私は何度も何度もチェックしました:

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

私は以下の書いたコードはgithubの上のフラスコ-Restplusサンプルプロジェクトの簡易版(1つのファイル)である:それは一貫してエラーを表示しますエラーがまだ表示される理由はわかりません。ここで

は私のコードです:

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) 

は、私は、コードの上に逃したものはありますか?あなたがUser.__init__をオーバーロードしているので、私は..とにかくそのかなり確信して

答えて

0

イムをpython2.7を使用しますが、スーパー呼び出すので、これを行うと、それがマップされている場合参照していませんでし:

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

私はちょうどスーパーで呼ばれてきました私のモデルinitですが、うまくいかなかったようです。私は新しいモデルで新しいプロジェクトを作成しようとしました、それは動作します。何が起こっているのか分かりません – rizkiaditya24

関連する問題