Ich versuche, eine vorhandene sqlite3 db an ein Dashboard anzuhängen, das ich erstelle, und ich habe ein Problem, dass ich nicht herausfinden kann, wie es gelöst wird. Ich habe daran gearbeitet, indem ich versucht habe, Dinge aus den Flask-Dokumenten und anderen Quellen zusammenzustellen, also könntest du mich hier anrufen, was etwas seltsam aussieht. Es ist wahrscheinlich, und ich weiß einfach nicht, es :)Flask OperationalError: Datenbankdatei kann mit sqlite3 nicht geöffnet werden
Code:
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
komplette Fehler:
Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1701, in call return self.wsgi_app(environ, start_response) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1689, in wsgi_app response = self.make_response(self.handle_exception(e)) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1356, in full_dispatch_request rv = self.preprocess_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1539, in preprocess_request rv = func() File "/home/aaron/Dropbox/coding/webapp2/control.py", line 22, in before_request g.db = connect_db() File "/home/aaron/Dropbox/coding/webapp2/control.py", line 17, in connect_db return sqlite3.connect(app.config['DATABASE']) OperationalError: unable to open database file
127.0.0.1 - - [13/Oct/2012 13:55:48] "GET /?debugger=yes&cmd=resource&f=style.css HTTP/1.1" 200 - 127.0.0.1 - - [13/Oct/2012 13:55:48] "GET /?debugger=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 - 127.0.0.1 - - [13/Oct/2012 13:55:48] "GET /?debugger=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 - 127.0.0.1 - - [13/Oct/2012 13:55:48] "GET /?debugger=yes&cmd=resource&f=console.png HTTP/1.1" 200 - 127.0.0.1 - - [13/Oct/2012 13:55:48] "GET /?debugger=yes&cmd=resource&f=source.png HTTP/1.1" 200 - 127.0.0.1 - - [13/Oct/2012 13:55:49] "GET /favicon.ico HTTP/1.1" 500 -
Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1701, in call return self.wsgi_app(environ, start_response) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1689, in wsgi_app response = self.make_response(self.handle_exception(e)) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1356, in full_dispatch_request rv = self.preprocess_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1539, in preprocess_request rv = func() File "/home/aaron/Dropbox/coding/webapp2/control.py", line 22, in before_request g.db = connect_db() File "/home/aaron/Dropbox/coding/webapp2/control.py", line 17, in connect_db return sqlite3.connect(app.config['DATABASE']) OperationalError: unable to open database file
Es scheint, dass das Problem aus dieser Konfigurationszeile kommt:
DATABASE = '~/home/aaron/Dropbox/coding/webapp2/tmp/test.db'
Meine Fragen:
1) Warum wird der OperationalError zweimal ausgelöst?
2) Warum ruft jeder OperationalError die Zeilen 17 und 22 (kommentiert in meinem obigen Code) aus, obwohl dies Funktionsdefinitionen sind und keine Funktionsaufrufe?
3) Wie behebe ich den Fehler, da es sich um eine gültige Datenbank mit Daten im angegebenen Pfad handelt?
Diese sind, was ich Referenzierung:
http://flask.pocoo.org/docs/tutorial/dbcon/#tutorial-dbcon
http://flask.pocoo.org/docs/tutorial/views/#tutorial-views
http://flask.pocoo.org/docs/patterns/sqlite3/