2010-10-25 50 views

Respuesta

30

este código es más general, pero tal vez puede ayudar a:

import sqlite3 

new_db = sqlite3.connect(':memory:') # create a memory database 

old_db = sqlite3.connect('test.db') 

query = "".join(line for line in old_db.iterdump()) 

# Dump old database in the new one. 
new_db.executescript(query) 

EDIT: para conseguir su especifique la tabla sólo se puede cambiar en el bucle de esta manera:

name_table = "test_table" # name of the table that you want to get. 

for line in old_db.iterdump(): 
    if name_table in line: 
     query = line 
     break 
+1

Parece que funciona, pero ¿qué tan eficiente es? – Clay

+1

@Clay: como he escrito en mi respuesta, este código es más general y genérico, puede usarlo para volcar toda la base de datos o para volcar solo una tabla dada, y para qué tan eficiente es? el código usa el iterador por una vez (menos memoria) y también crea toda la base de datos en una sola consulta, lo que significa no subir y bajar (menos comunicación). – mouad

+0

Gracias! Esto me ayudará mucho. Me gusta la flexibilidad de eso. – Clay

3

Consulte el SQLite Backup API. El ejemplo está en C, pero esto debería mostrar cómo se hace de manera eficiente.

+0

Desafortunadamente, no conozco ningún C. Creo que oí en algún lado que apsw (otro Python Sqlite Wrapper) tenía una función de respaldo. ¿Es esto cierto? – Clay

+0

útil :) ¡solo necesito algo como esto! Great thx –

+0

'sqlite3_backup *' Las funciones C no están disponibles a través de Python sqlite3 API. Aunque debería ser fácil crear una extensión C para Python que los llame – jfs

Cuestiones relacionadas