使用SQLAlchemy构造Flask-Restful API

时间:2015-03-12 00:28:03

标签: flask flask-sqlalchemy flask-restful

所以我正在尝试使用Flask-Restful创建一个API,但我找到的所有示例都将所有内容放入一个app.py文件中。我在Flask-Restful docs中找到了解释如何构建API的信息,但它没有包含任何使用数据库的信息。我已经发布了我已经提出的内容,如果我对某些数据进行硬编码,它会有效,但当我将db导入users.py时,我会收到错误ImportError: cannot import name 'db'。那么,构建API以从数据库引入数据的最佳方法是什么?

结构

myapi
    run.py
    api
        __init__.py
        resources
            __init__.py
            user.py

myapi / run.py

from api import app
app.run()

myapi / __初始化__。PY

from flask import Flask
from flask.ext.restful import Api
from flask.ext.sqlalchemy import SQLAlchemy
from api.resources.user import User

app = Flask(__name__)
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/myapi'

api = Api(app)
db = SQLAlchemy(app)

api.add_resource(User, '/user')

../资源/ user.py

from flask.ext.restful import Resource
from api import db


class User(Resource, db.Model):
    def get(self):
        return {'class': 'user', 'first': 'john', 'last': 'doe'}

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,让我感到困难的时间超过了我承认的时间。看起来这是同样的问题,所以尽管问题的年龄我会给出一个答案,希望我可以节省一些时间。这里的问题实际上是包装顺序的事情。必须在导入用户类之前实例化主init中的db,因为这会导入db本身。我认为这是一个很多人陷入困境的陷阱,因为一个人的直接反应就是将所有的包装加载器放在文件的顶部 - 遗憾的是,在这种情况下,它并没有起作用,你最终追逐你的尾巴...

答案 1 :(得分:1)

将您的资源/模型导入移动到您分配db变量的位置下方(因为这些模块/脚本依赖于已经实例化的数据库):

<强> myapi / API / __初始化__。PY

from flask import Flask
from flask.ext.restful import Api
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/myapi'

api = Api(app)
db = SQLAlchemy(app)

from api.resources.user import User

api.add_resource(User, '/user')