在 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 路由