python - with - flask database
Flask OperationalError: no se puede abrir el archivo de base de datos usando sqlite3 (2)
Creo que el problema es el carácter ~
(válido en shell pero no en Python), por lo que probablemente necesites escribir la ruta absoluta completa. No estoy usando Flask, pero sugiero configurar la constante PROJECT_ROOT en su configuración y luego usar rutas relativas:
import os
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
DATABASE = os.path.join(PROJECT_ROOT, ''tmp'', ''test.db'')
Intento conectar un sqlite3 db existente a un panel que estoy construyendo y me encontré con un problema que no puedo resolver. He estado trabajando en esto al tratar de reconstruir cosas de los documentos de Flask y otras fuentes, así que siéntanse libres de llamarme sobre algo aquí que se vea un poco extraño. Probablemente lo sea, y simplemente no lo sé :)
Código:
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
Error completo:
Rastreo (llamada más reciente): Archivo "/usr/local/lib/python2.7/dist-packages/flask/app.py", línea 1701, en devolución de llamada self.wsgi_app (environ, start_response) File "/ usr /local/lib/python2.7/dist-packages/flask/app.py ", línea 1689, en wsgi_app response = self.make_response (self.handle_exception (e)) Archivo" /usr/local/lib/python2.7 /dist-packages/flask/app.py ", línea 1687, en wsgi_app response = self.full_dispatch_request () Archivo" /usr/local/lib/python2.7/dist-packages/flask/app.py ", línea 1360 , en full_dispatch_request rv = self.handle_user_exception (e) Archivo "/usr/local/lib/python2.7/dist-packages/flask/app.py", línea 1356, en full_dispatch_request rv = self.preprocess_request () Archivo "/ usr / local / lib / python2.7 / dist-packages / matraz / app.py ", línea 1539, en preprocess_request rv = func () Archivo" /home/aaron/Dropbox/coding/webapp2/control.py ", línea 22, en before_request g.db = connect_db () Archivo "/home/aaron/Dropbox/coding/webapp2/control.py", línea 17, en connect_db return sqlite3.connect (app.config [''DA TABASE '']) OperationalError: no se puede abrir el archivo de la base de datos
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 /? Depurador = yes & cmd = resource & f = depurador .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 -
Rastreo (llamada más reciente): Archivo "/usr/local/lib/python2.7/dist-packages/flask/app.py", línea 1701, en devolución de llamada self.wsgi_app (environ, start_response) File "/ usr /local/lib/python2.7/dist-packages/flask/app.py ", línea 1689, en wsgi_app response = self.make_response (self.handle_exception (e)) Archivo" /usr/local/lib/python2.7 /dist-packages/flask/app.py ", línea 1687, en wsgi_app response = self.full_dispatch_request () Archivo" /usr/local/lib/python2.7/dist-packages/flask/app.py ", línea 1360 , en full_dispatch_request rv = self.handle_user_exception (e) Archivo "/usr/local/lib/python2.7/dist-packages/flask/app.py", línea 1356, en full_dispatch_request rv = self.preprocess_request () Archivo "/ usr / local / lib / python2.7 / dist-packages / matraz / app.py ", línea 1539, en preprocess_request rv = func () Archivo" /home/aaron/Dropbox/coding/webapp2/control.py ", línea 22, en before_request g.db = connect_db () Archivo "/home/aaron/Dropbox/coding/webapp2/control.py", línea 17, en connect_db return sqlite3.connect (app.config [''DA TABASE '']) OperationalError: no se puede abrir el archivo de la base de datos
Parece que el problema proviene de esta línea de configuración:
DATABASE = ''~/home/aaron/Dropbox/coding/webapp2/tmp/test.db''
Mis preguntas:
1) ¿Por qué se lanza el OperationalError dos veces?
2) ¿Por qué cada OperationalError llama a las líneas 17 y 22 (comentadas en mi código anterior), a pesar de que estas son definiciones de funciones y no llamadas a funciones?
3) ¿Cómo resuelvo el error, dado que este es un db válido con datos en la ruta especificada?
Esto es a lo que me refiero:
http://flask.pocoo.org/docs/tutorial/dbcon/#tutorial-dbcon
Esto funcionó para mí:
Cuando defina la base de datos al principio, no solo diga app.database = ''example.db''
; en su lugar, debe especificar la ruta del directorio de inicio con barras diagonales dobles :
"ex : //var//www//foldername//example.db"
si está utilizando Linux y reinicia el servidor nuevamente.