2010-10-25 14 views

Odpowiedz

30

ten kod jest bardziej ogólnego, ale może to pomóc:

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: na uzyskanie określić tabelę można po prostu zmiana w pętli tak:

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

Wygląda na to, że to działa, ale jak skuteczne jest to? – Clay

+1

@Clay: tak jak napisałem w mojej odpowiedzi ten kod jest bardziej ogólny i ogólny, można go użyć do zrzucenia całej bazy danych lub zrzucenia tylko danej tabeli, i jak jest to efektywne? kod używa iteratora tylko raz (mniej pamięci), a także tworzy całą bazę danych w jednym zapytaniu, co oznacza brak ruchu w górę i w dół (mniej komunikacji). – mouad

+0

Dzięki! To mi bardzo pomoże. Podoba mi się elastyczność tego. – Clay

3

Sprawdź numer SQLite Backup API. Przykład znajduje się w C, ale powinno to pokazać, jak to zrobić wydajnie.

+0

Niestety, nie znam żadnego C. Wydaje mi się, że słyszałem gdzieś, że apsw (Another Python Sqlite Wrapper) Miał funkcję kopii zapasowej. Czy to prawda? – Clay

+0

przydatne :) po prostu potrzebuję czegoś takiego! Great thx –

+0

'sqlite3_backup *' Funkcje C nie są dostępne za pośrednictwem interfejsu API Python sqlite3. Chociaż powinno być łatwe utworzenie rozszerzenia C dla Pythona, który je wywołuje – jfs

Powiązane problemy