构建 Flask-Restful API 以使用 SQLAlchemy

Mr.*_*1.0 5 flask flask-sqlalchemy flask-restful

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

结构

myapi
    run.py
    api
        __init__.py
        resources
            __init__.py
            user.py
Run Code Online (Sandbox Code Playgroud)

myapi/run.py

from api import app
app.run()
Run Code Online (Sandbox Code Playgroud)

myapi/__init__.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')
Run Code Online (Sandbox Code Playgroud)

../资源/用户.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'}
Run Code Online (Sandbox Code Playgroud)

Dun*_*unk 2

我遇到了同样的问题,它让我困惑的时间比我愿意承认的还要长。看起来这是同样的问题,所以尽管问题已经存在很久了,我还是会给出答案,希望可以节省其他人的时间。这里的问题实际上是一个包的顺序问题。主 init 中的 db 必须在导入用户类之前实例化,因为这会导入 db 本身。我认为这是一个很多人都会陷入的陷阱,因为人们的第一反应就是将所有包加载器放在文件的顶部 - 遗憾的是,在这种情况下,它不起作用,你最终会追着尾巴很长时间...