我正在编写一个简单的应用程序来学习Flask和SQLAlchemy基础知识。目前,我已经定义了我的数据库,没有SQLAlchemy组件(没有数据存储),应用程序运行正常。
应用程序只需在URL中获取一个int并返回doubled值,同时存储用户传递的值以及数据库中的时间戳。
目前,当我进行查询以更新数据库并返回新值时,我得到500错误 db.session.commit()
线。
完整代码:
来自烧瓶导入烧瓶的来自于flask.ext.sqlalchemy导入SQLAlchemy 导入日期时间
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class Call(db.Model):
id = db.Column(db.Integer, primary_key=True)
call_value = db.Column(db.Integer)
call_time = db.Column(db.Integer)
def __init__(self,user_input):
self.call_value = user_input
self.call_time = datetime.datetime.now()
def __repr__(self):
return '<Doubled %r>' % self.call_value
@app.route('/doubler/<int:val>', methods=['GET'])
def show_double(val):
query = Call(val)
db.session.add(query)
db.session.commit()
return "Value: " + str(2*val)
if __name__ == "__main__":
app.run()
我有两个问题可能发生这种情况:获取和格式化日期时间的某些问题,或者需要手动完成主键生成。但是,我所看到的一切都表明这些都不是问题。提交到我的数据库需要做什么?我应该在一个单独的文件中完成所有数据库工作吗?
编辑:
调试错误是:
OperationalError: (sqlite3.OperationalError) unable to open database file
答案 0 :(得分:0)
确保运行Flask脚本的用户具有阅读和阅读权限的权限。写在/tmp/test.db
上,似乎'sqlite:////tmp/test.db'
中有一个不必要的额外内容。