with python sqlite3 flask

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

http://flask.pocoo.org/docs/tutorial/views/#tutorial-views

http://flask.pocoo.org/docs/patterns/sqlite3/


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.