2010-10-25 5 views

cevap

30

bu kod daha geneldir ama belki size yardımcı olabilir:

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) 

DÜZENLEME: senin aynen bu döngü içinde değiştirebilir tabloyu belirtmek almak için:

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

Bu işe yarıyor gibi görünüyor, ancak ne kadar verimli? – Clay

+1

@Clay: cevabımda yazdığım gibi bu kod daha genel ve geneldir, tüm veritabanını dökmek veya sadece belirli bir tabloyu dökmek için ve ne kadar verimli olduğu için kullanabilirsiniz? Kod bir kez (daha az bellek) için iterator kullanir ve ayni zamanda tek bir sorguda tüm veritabanini olusturur, bu da yukari ve goz (daha az iletisim) anlamina gelir. – mouad

+0

Teşekkürler! Bu bana çok yardımcı olacak. Bunun esnekliğini severim. – Clay

3

SQLite Backup API'a bakın. Örnek C'dedir, ancak bu nasıl yapıldığını göstermelidir. piton ve SQLAlchemy kullananlar için

+0

Ne yazık ki, ben C bilmiyorum Bir yerde duydum sanıyordum (başka bir Python Sqlite Wrapper) Yedekleme fonksiyonu vardı. Bu doğru mu? – Clay

+0

yararlı :) Sadece böyle bir şeye ihtiyacım var! Büyük thx –

+0

'sqlite3_backup *' C işlevleri Python sqlite3 API aracılığıyla kullanılamaz. Her ne kadar onları çağırırsa Python için bir C uzantısı oluşturmak kolay olsa da – jfs