一尘不染

结构化Flask-Restful API以使用SQLAlchemy

flask

因此,我尝试使用Flask-Restful创建一个API,但是我发现的所有示例都将所有内容都放在一个app.py文件中。我在Flask-Restful文档中找到了解释如何构造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 / 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')

../resources/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'}

阅读 693

收藏
2020-04-07

共1个答案

一尘不染

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

myapi / api / init.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')
2020-04-07