2011-04-29 14 views
8

¿Es posible guardar mi base de datos sqlite en memoria en el disco duro? Si es posible, algún código python sería increíble.python guardar en la memoria sqlite

Gracias de antemano.

EDIT:

que tuvo éxito esta tarea mediante el uso de APSW. Funciona a las mil maravillas. Gracias por tu contribución.

+1

Qué quiere decir la creación de una base de datos en ': Memoria:', luego trabajar con él y guardarlo en el disco? ¿Qué le daría esto frente a simplemente crearlo en el disco en primer lugar? –

+0

@Shansai: Además de gracias, (1) acepta la respuesta (2) upvote it. –

Respuesta

2

Abra una base de datos basada en disco y simplemente copie todo de uno a otro.

+0

¿Me puede dar algún código python? – Shansal

6

Sí. Cuando crea la conexión a la base de datos, reemplace :memory: con la ruta donde desea guardar el DB.

sqlite utiliza cachés para bases de datos basadas en archivos, por lo que esto no debería ser (mucho) más lento.

9

(Revelación: yo soy el autor APSW)

La única manera segura de hacer una copia binaria de una base de datos es utilizar la API de copia de seguridad que es parte de SQLite y se expone por APSW. Esto hace lo correcto con ordenar, bloquear y concurrencia.

Para hacer una copia de SQL (texto) de una base de datos luego use el shell APSW que incluye una implementación .dump que es muy completa. Puede usar cursor.execute() para volver a convertir el SQL en una base de datos.

En las plataformas recientes, es poco probable que vea mucha diferencia entre una base de datos de memoria y una de disco (suponiendo que desactivó el registro en el disco) ya que el sistema operativo mantiene una memoria caché del sistema de archivos. Los sistemas operativos más antiguos, como Windows XP, tenían una configuración predeterminada de solo usar 10 MB de memoria para la memoria caché de archivos, sin importar la cantidad de RAM que tenga.

3

por la sqlite3 python documentation, puede utilizar el método iterdump() para hacer un volcado de archivos .sql de su base de datos en memoria, y entonces es trivial para aplicar ese archivo .sql a una nueva base de datos de archivos SQLite.

# Convert file existing_db.db to SQL dump file dump.sql 
import sqlite3, os 

con = sqlite3.connect('existing_db.db') 
with open('dump.sql', 'w') as f: 
    for line in con.iterdump(): 
     f.write('%s\n' % line) 
0
import apsw 

memconn = apsw.Connection(":memory:") 
memcursor = memconn.cursor() 
memcursor.execute("create table foo(x,y,z)") 
memcursor.execute("insert into foo values(?,?,?)", (1, 1.1, None)) 

thediskconn = apsw.Connection("adisk.db") 
with thediskconn.backup("main", memconn, "main") as backup: 
    backup.step() # copy whole database in one go 

memcursor.close() 
memconn.close() 
#continue with thediskconn 
Cuestiones relacionadas