2012-04-18 18 views
15

Al usar sqlite3 de C/C++ me enteré de que tiene una opción de modo abierto solo lectura, que es muy útil para evitar daños accidentales en los datos. ¿Hay algo así en el enlace de Python?Apertura de la base de datos sqlite3 de python en modo de solo lectura

+0

Posible duplicado de: http://stackoverflow.com/questions/4239606/sqlite3-read-only-on-a-file-system-that-doesnt-support-locking – Chris

+1

@Chris Gracias, redactaré una respuesta solo para ahorrar trabajo a personas futuras con la misma pregunta. – dsign

+0

posible duplicado de [force python para renunciar a sqlite3 nativo y utilizar la última versión sqlite3 (instalada)] (http://stackoverflow.com/questions/1545479/force-python-to-forego-native-sqlite3-and-use- the-installed-latest-sqlite3-ver) –

Respuesta

2

Según el enlace dado por @Chris, no. Pero hay otra envoltura para sqlite3, que es menos compatible con PEP 249 y que envuelve sqlite3 más estrechamente, asimilando nuevas características del motor: http://code.google.com/p/apsw/. Ese contenedor admite la apertura de la base de datos en modo de solo lectura, además de otros detalles.

21

A partir de Python 3.4.0 se puede abrir la base de datos en modo de sólo lectura con lo siguiente:

db = sqlite3.connect('file:/path/to/database?mode=ro', uri=True) 

Véase también the documentation.

+0

NOTA: esto no funciona en Python, solo en Python 3 – lowtech

7

Solución para Python 2.x:

fd = os.open(filename, os.O_RDONLY) 
c = sqlite3.connect('/dev/fd/%d' % fd) 
os.close(fd) 

No POSIX, pero está disponible en Linux, OS/X y la mayoría de los sistemas Unix modernos.

Cuestiones relacionadas