在 Flask-Restless 中遇到数据库连接问题

Posted

技术标签:

【中文标题】在 Flask-Restless 中遇到数据库连接问题【英文标题】:Getting stuck with database connections in Flask-Restless 【发布时间】:2016-09-01 15:08:42 【问题描述】:

我正在尝试使用 Flask 在 PythonAnywhere 上提供数据并希望使用 Flask-Restful,但我意识到我有点困惑。

@app.route("/test")
def create_api():
    engine = create_engine(SQLALCHEMY_DATABASE_URI)
    Session = sessionmaker(bind=engine)
    session = Session()



    try:
        db = dataset.connect(SQLALCHEMY_DATABASE_URI)
    except:
        print "couldn't connect to database"


    class Prices(db.Model):
        __tablename__ = 'data'
        pcode_district = db.Column(db.Integer, primary_key=True)
        year_95 = db.Column(db.Float)
        year_15 = db.Column(db.Float)
        percent_change = db.Column(db.Float)
    #Create the Flask-Restless API manager
    manager = flask.ext.restless.APIManager(app,
                                    flask_alchemy_db = db)
    manager.create_api(Prices, methods=['GET'], max_results_per_page =1000)

我得到的错误与定义数据库模型的类有关:

AttributeError: 'Database' object has no attribute 'Model'

我对会话和数据库实例之间的关系感到困惑。

我做错了什么?

【问题讨论】:

代码中的dataset 变量来自哪里? 我使用数据集模块连接数据库。 我不知道dataset 模块,但是您是否故意将您的Prices 类定义为基于您从中获取的数据库连接的某个东西的子类?正如 Glenn 在他对这个问题的回答中所说,您指定为超类的 db.Model 包含在 dataset 连接中。如果您打算将其作为其他 db 模块的一个类,那么您应该为 dataset 连接使用不同的变量名。 【参考方案1】:

您已使用本地 db 变量覆盖了 db 模块。将您在此处分配给db = dataset.connect(SQLALCHEMY_DATABASE_URI)db 重命名为其他名称。

【讨论】:

以上是关于在 Flask-Restless 中遇到数据库连接问题的主要内容,如果未能解决你的问题,请参考以下文章

Flask-restless 创建带有 unicode 字段的模型

使用 Flask-Restless 进行 GAE app.yaml 路由

如何对 JSONB 内容运行 Flask-restless api 过滤器查询

如何查询使用 Flask-restless 设置的 API

如何在 Flask-RESTless 中使用关键字参数

flask-restless 限制 RESTful api 访问