我正在尝试将现有的 sqlite3 db 连接到我正在构建的仪表板,但我遇到了一个我不知道如何解决的问题。我一直在通过尝试将 Flask 文档和其他来源的内容拼凑起来来解决这个问题,所以如果这里看起来有点奇怪,请随时打电话给我。可能是,我只是不知道:)
代码:
from __future__ import with_statement
from contextlib import closing
from flask import Flask, render_template, request, session, g, redirect, url_for, abort, flash
import sqlite3
#config
DATABASE = '~/home/aaron/Dropbox/coding/webapp2/tmp/test.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'
app = Flask(__name__)
app.config.from_object(__name__)
def connect_db():
return sqlite3.connect(app.config['DATABASE']) # LINE 17
@app.before_request
def before_request():
g.db = connect_db() # LINE 22
@app.teardown_request
def teardown_request(exception):
if hasattr(g, 'db'):
g.db.close()
# App seems to error out before app.route and if __name__=='__main__' block
# Everything in my app.route is commented out
完全错误:
回溯(最近一次调用):文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1701 行, 调用中 返回 self.wsgi_app(environ, start_response) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1689 行,在 wsgi_app response = self.make_response(self.handle_exception(e) ) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1687 行,在 wsgi_app 响应 = self.full_dispatch_request() 文件“/usr/local/lib/python2.7/ dist-packages/flask/app.py”,第 1360 行,在 full_dispatch_request rv = self.handle_user_exception(e) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1356 行, 在 full_dispatch_request rv = self.preprocess_request() 文件 "/usr/local/lib/python2.7/dist-packages/flask/app.py", 第 1539 行, 在 preprocess_request rv = func() 文件 "/home/aaron /Dropbox/coding/webapp2/control.py”,第 22 行,在 before_request g.db = connect_db() 文件“/home/aaron/Dropbox/coding/webapp2/control.py”,第 17 行,在 connect_db 返回 sqlite3.connect(app.config['DATABASE']) OperationalError: 无法打开数据库文件
127.0.0.1 - - [2012 年 10 月 13 日 13:55:48] “GET /?调试器=yes&cmd=resource&f=style.css HTTP/1.1”200 - 127.0.0.1 - - [2012 年 10 月 13 日 13:55 :48]“GET /?调试器=yes&cmd=resource&f=jquery.js HTTP/1.1”200 - 127.0.0.1 - - [13/Oct/2012 13:55:48]“GET /?调试器=yes&cmd=resource&f=debugger .js HTTP/1.1" 200 - 127.0.0.1 - - [13/Oct/2012 13:55:48] "GET /?调试器=yes&cmd=resource&f=console.png HTTP/1.1" 200 - 127.0.0.1 - - [ 2012 年 10 月 13 日 13:55:48]“GET /?调试器=yes&cmd=resource&f=source.png HTTP/1.1”200 - 127.0.0.1 - - [2012 年 10 月 13 日 13:55:49]“GET / favicon.ico HTTP/1.1" 500 -
回溯(最近一次调用):文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1701 行, 调用中 返回 self.wsgi_app(environ, start_response) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1689 行,在 wsgi_app response = self.make_response(self.handle_exception(e) ) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1687 行,在 wsgi_app 响应 = self.full_dispatch_request() 文件“/usr/local/lib/python2.7/ dist-packages/flask/app.py”,第 1360 行,在 full_dispatch_request rv = self.handle_user_exception(e) 文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第 1356 行, 在 full_dispatch_request rv = self.preprocess_request() 文件 "/usr/local/lib/python2.7/dist-packages/flask/app.py", 第 1539 行, 在 preprocess_request rv = func() 文件 "/home/aaron /Dropbox/coding/webapp2/control.py”,第 22 行,在 before_request g.db = connect_db() 文件“/home/aaron/Dropbox/coding/webapp2/control.py”,第 17 行,在 connect_db 返回 sqlite3.connect(app.config['DATABASE']) OperationalError: 无法打开数据库文件
似乎问题来自此配置行:
DATABASE = '~/home/aaron/Dropbox/coding/webapp2/tmp/test.db'
我的问题:
1) 为什么 OperationalError 被抛出两次?
2)为什么每个 OperationalError 都会调用第 17 和 22 行(在我上面的代码中注释),即使这些是函数定义而不是函数调用?
3)如果这是一个有效的数据库,数据位于指定的路径,我该如何解决?
这些是我所引用的:
http://flask.pocoo.org/docs/tutorial/dbcon/#tutorial-dbcon