0
實施燒瓶的SQLAlchemy我燒瓶Restplus時,我只是有一個問題。它始終顯示錯誤:sqlalchemy.orm.exc.UnmappedInstanceError:類「 __main __用戶」未對應燒瓶的SQLAlchemy
sqlalchemy.orm.exc.UnmappedInstanceError: Class '__main__.User' is not mapped
我下面寫的代碼是燒瓶Restplus示例項目的GitHub上的簡化版本(1個文件):https://github.com/postrational/rest_api_demo
我一遍又一遍檢查,但不知道爲什麼錯誤仍然出現。
這裏是我的代碼:
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)
有什麼我錯過了代碼?我使用python2.7反正..
我剛剛叫超上我的模型初始化,但似乎沒有奏效。我試圖用新模型創建新項目,它工作。不知道這裏發生了什麼 – rizkiaditya24