with tutorial fetchmany error descargar python sqlite3

tutorial - sqlite3 python install



Sqlite3, OperationalError: no se puede abrir el archivo de base de datos (11)

¡Asegúrate de no estar editando el archivo settings.py mientras intentas ejecutar syncdb, obtendrás el mismo error!

self.connection = Database.connect(**kwargs) sqlite3.OperationalError: unable to open database file

Pregunta: ¿Por qué no puedo abrir la base de datos?

Información: Estoy trabajando en un proyecto cuyo propósito no es importante pero utiliza una base de datos sqlite3. Hice un programa de prueba que se ejecuta y le pasa la ubicación para hacer una base de datos:

/tmp/cer/could.db

y el programa de prueba de la unidad puede hacer que la db no sea un problema. Entonces, en realidad uso el programa, le paso la misma ubicación y dice:

Error operacional: no se puede abrir el archivo de base de datos

He intentado hacerlo con una base de datos vacía. con la base de datos la prueba de la unidad quedó atrás, y sin ninguna base de datos. En los tres casos me sale este error. La parte más frustrante tiene que ser el hecho de que la prueba de unidad puede hacerlo bien, pero el programa real no puede.

¿Alguna pista sobre qué demonios está pasando?


Diagnóstico primario: SQLite no puede abrir ese archivo por algún motivo.

Verificando las razones obvias de por qué, y en orden aproximado que recomiendo verificar:

  • ¿Se está ejecutando el programa en la misma máquina que lo está probando?
  • ¿Se está ejecutando como usted (o al menos el mismo usuario con el que lo está probando)?
  • ¿El disco contiene /tmp lleno? (Estás en Unix, así que usa df /tmp para averiguarlo).
  • ¿El directorio /tmp/cer tiene permisos "impares"? (SQLite necesita poder crear archivos adicionales en él para manejar cosas como el registro de confirmación).
  • ¿Sigue usando el código de prueba de la unidad esa base de datos? (Las aperturas simultáneas son posibles con un SQLite suficientemente moderno y cuando se encuentra en el sistema de archivos correcto, aunque /tmp está prácticamente siempre en el tipo correcto de FS, por lo que probablemente no sea eso, pero aún no se recomienda).
  • ¿El código de desarrollo realmente está tratando de escribir en esa base de datos, o algo "inteligente" lo atrapa y hace que intente abrir algo más? (He estado atrapado por esto en mi código en el pasado; no creas que no te puede pasar a ti ...)
  • ¿Está utilizando la misma versión de la biblioteca SQLite en las pruebas unitarias y el código de producción?

Si no está en la misma máquina, es muy posible que el sistema de producción no tenga un directorio /tmp/cer . Obvio de arreglar eso primero. De manera similar, si está en la misma máquina pero ejecutándose como usuarios diferentes, es probable que tenga problemas de permisos / propiedad. El espacio en disco es otro problema serio, pero menos probable. No creo que sean los últimos tres, pero vale la pena comprobar si se solucionan los problemas de implementación más obvios. Si no es nada de lo anterior, ha encontrado un problema exótico y tendrá que reportar mucha más información (incluso podría ser un error en SQLite, pero conociendo a los desarrolladores, creo que es bastante improbable).


En Unix obtuve ese error cuando uso el acceso directo para el directorio de usuarios. Cambiarlo a /home/user resolvió el error.


En mi caso, la solución fue usar una ruta absoluta para encontrar un archivo existente:

import os.path filepath = os.path.abspath(filepath) # Leave this out if the file doesn''t exist yet assert os.path.exists(filepath), "The file doesn''t exist" conn = sqlite3.connect(filepath)

No sé por qué funciona esta solución: la ruta solo contenía caracteres ASCII y no espacios. Aún así hizo la diferencia.

Para referencia: Windows 7, Python 3.6.5 (64 bits).

No pude reproducir el problema en otra máquina (también Windows 7, Python 3.6.4 64-bit), así que no tengo idea de por qué funciona esta solución.


Este es definitivamente un problema de permisos. Si alguien está recibiendo este error en Linux, asegúrese de que está ejecutando el comando con sudo ya que el archivo probablemente es propiedad de root. ¡Espero que ayude!


Esto funcionó para mí:

conn = sqlite3.connect("C://users//guest//desktop//example.db")

Nota: Doble barra diagonal en la ruta completa.

Usando python v2.7 en Win 7 enterprise y Win Xp Pro

Espero que esto ayude a alguien.


Lo único que debe hacer es crear la carpeta (ya que no existe), el programa solo creará el archivo de la base de datos. ¡Esto realmente funcionó para mí!


Me enfrenté con el mismo problema en Windows 7. El nombre de mi base de datos era de test y recibí el error:

self.connection = Database.connect(**kwargs) sqlite3.OperationalError: unable to open database file

Reemplazé la test con test.db y todo salió bien.


Una razón podría ser ejecutar el código en una ruta que no coincida con la ruta especificada para la base de datos. Por ejemplo, si en tu código tienes:

conn = lite.connect(''folder_A/my_database.db'')

Y ejecuta el código dentro de la folder_A u otros lugares que no tienen una folder_A generará dicho error. La razón es que SQLite creará el archivo de base de datos si no existe, no la carpeta.

Otra forma de solucionar este problema podría ser envolver su comando de conexión en una expresión try-except y crear el directorio si genera sqlite3.OperationalError .

desde os import mkdir import sqlite3 como lite

try: conn = lite.connect(''folder_A/my_database.db'') except lite.OperationalError: mkdir(''folder_A'') finally: conn = lite.connect(''folder_A/my_database.db'')


Utilice el nombre completo del archivo de base de datos

Use- /home/ankit/Desktop/DS/Week-7-MachineLearning/Week-7-MachineLearning/soccer/database.sqlite

en lugar-


import sqlite3 connection = sqlite3.connect("d://pythonAPI//data.db") cursor = connection.cursor() create_table = "CREATE TABLE users (id int, username text, password text)" cursor.execute(create_table)


para un camino completo más claro si no lo hiciste claro