Flask 构造Restful API以使用SQLAlchemy

Flask 构造Restful API以使用SQLAlchemy,flask,flask-sqlalchemy,flask-restful,Flask,Flask Sqlalchemy,Flask Restful,因此,我试图使用Flask Restful制作一个API,但我发现的所有示例都将所有内容放在一个app.py文件中。我在文章中找到了解释如何构造API的信息,但其中没有任何关于使用数据库的内容。我已经发布了我的想法,如果我硬编码一些数据,它会起作用,但是当我将db导入users.py时,我得到一个错误ImportError:无法导入名称“db”。那么,构造API以从数据库引入数据的最佳方法是什么 结构 myapi run.py api __init__.py

因此,我试图使用Flask Restful制作一个API,但我发现的所有示例都将所有内容放在一个app.py文件中。我在文章中找到了解释如何构造API的信息,但其中没有任何关于使用数据库的内容。我已经发布了我的想法,如果我硬编码一些数据,它会起作用,但是当我将
db
导入
users.py
时,我得到一个错误
ImportError:无法导入名称“db”
。那么,构造API以从数据库引入数据的最佳方法是什么

结构

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

from api import app
app.run()
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')
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'}
myapi/\uuuuu init\uuuuuuuuuuuuy.py

from api import app
app.run()
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')
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'}
。/resources/user.py

from api import app
app.run()
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')
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'}

我也遇到了同样的问题,这让我难堪的时间比我愿意承认的还要长。看起来这是同一个问题,所以尽管这个问题已经很老了,我还是会给出一个答案,希望能为其他人节省一些时间。这里的问题实际上是包的顺序问题。在导入用户类之前,必须先实例化主init中的db,因为这会导入db本身。我认为这是一个很多人都会陷入的陷阱,因为一个人的即时反应是将所有的包加载器放在文件的顶部-不幸的是,在这种情况下,它不起作用,你会在后面追上好几年…

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

myapi/api/\uuuu init\uuuu.py

from api import app
app.run()
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')
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'}
从烧瓶导入烧瓶
来自flask.ext.restful导入Api
从flask.ext.sqlalchemy导入sqlalchemy
app=烧瓶(名称)
app.debug=True
app.config['SQLALCHEMY\u DATABASE\u URI']='postgresql://localhost/myapi'
api=api(应用程序)
db=SQLAlchemy(应用程序)
从api.resources.user导入用户
api.add_资源(用户,“/User”)

api中有什么?告诉我们。@RobertMoskal哦,那是一个文件夹你的db在
\uuu init\uuu
中,但是你从
user.py中的
api
导入它,是的,就像corvid说的,你的问题是user.py中的api,应该是从app import数据库中,关键是注意,
来自api.resources.user import user
db=SQLA之后lchemy(应用程序)