Ich versuche, eine existierende sqlite3 db an ein Dashboard anzuhängen, das ich gerade erstelle, und ich habe ein Problem, das ich nicht herausfinden kann, wie ich es lösen soll. Ich habe daran gearbeitet, indem ich versucht habe, Dinge aus den Flask-Dokumenten und anderen Quellen zusammenzutragen, also könntest du mich hier anrufen, was etwas seltsam aussieht. Es ist wahrscheinlich, und ich weiß es einfach nicht:)
Code:
%Vor%Vollständiger Fehler:
Traceback (letzter Aufruf zuletzt): Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1701, in Anruf return self.wsgi_app (environ, start_response) Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1689, in wsgi_app Antwort = self.make_response (self.handle_exception (e)) Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1687, in wsgi_app response = self.full_dispatch_request () Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1360, in full_dispatch_request rv = self.handle_user_exception (e) Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1356, in full_dispatch_request rv = self.preprocess_request () Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1539, in Vorverarbeitungsrückfrage rv = func () Datei "/home/aaron/Dropbox/coding/webapp2/control.py", Zeile 22, in der Voranfrage g.db = connect_db () Datei "/home/aaron/Dropbox/coding/webapp2/control.py", Zeile 17, in connect_db return sqlite3.connect (app.config ['DATABASE']) OperationalError: Datenbankdatei konnte nicht geöffnet werden
127.0.0.1 - - [13 / Okt. 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 (letzter Aufruf zuletzt): Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1701, in Anruf return self.wsgi_app (environ, start_response) Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1689, in wsgi_app Antwort = self.make_response (self.handle_exception (e)) Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1687, in wsgi_app response = self.full_dispatch_request () Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1360, in full_dispatch_request rv = self.handle_user_exception (e) Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1356, in full_dispatch_request rv = self.preprocess_request () Datei "/usr/local/lib/python2.7/dist-packages/flask/app.py", Zeile 1539, in Vorverarbeitungsrückfrage rv = func () Datei "/home/aaron/Dropbox/coding/webapp2/control.py", Zeile 22, in der Voranfrage g.db = connect_db () Datei "/home/aaron/Dropbox/coding/webapp2/control.py", Zeile 17, in connect_db return sqlite3.connect (app.config ['DATABASE']) OperationalError: Datenbankdatei konnte nicht geöffnet werden
Es scheint, dass das Problem von dieser Konfigurationszeile kommt:
%Vor%Meine Fragen:
1) Warum wird der OperationalError zweimal ausgelöst?
2) Warum ruft jeder OperationalError die Zeilen 17 und 22 auf (in meinem obigen Code kommentiert), 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?
Dies ist, was ich verweise:
Ich denke, das Problem ist das ~
-Zeichen (gültig in der Shell, aber nicht in Python), also wirst du wahrscheinlich den vollständigen absoluten Pfad schreiben müssen. Ich verwende keinen Flask, aber ich empfehle, die PROJECT_ROOT-Konstante in Ihren Einstellungen festzulegen und dann relative Pfade zu verwenden:
Das hat für mich funktioniert:
Wenn Sie die Datenbank am Anfang definieren, sagen Sie nicht einfach app.database = 'example.db'
, stattdessen müssen Sie den Home-Verzeichnispfad mit doppelten Schrägstrichen angeben:
"ex : //var//www//foldername//example.db"
Wenn Sie Linux verwenden und den Server erneut starten.