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__
をオーバーロードしているので、私は..とにかくそのかなり確信して
私はちょうどスーパーで呼ばれてきました私のモデルinitですが、うまくいかなかったようです。私は新しいモデルで新しいプロジェクトを作成しようとしました、それは動作します。何が起こっているのか分かりません – rizkiaditya24