Disk tabanlı bir sqlite tablosu python'daki bir bellek veritabanına nasıl kopyalanır? Masanın şemasını biliyorum.Bir sqlite tablosunu disk veritabanından python'daki bir bellek veritabanına nasıl kopyalarım?
cevap
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
SQLite Backup API'a bakın. Örnek C'dedir, ancak bu nasıl yapıldığını göstermelidir. piton ve SQLAlchemy kullananlar için
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
yararlı :) Sadece böyle bir şeye ihtiyacım var! Büyük thx –
'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
bir alternatif:
http://www.tylerlesmann.com/2009/apr/27/copying-databases-across-platforms-sqlalchemy/
fikri arkasında hedef veritabanına kaynak veritabanından meta çoğaltmak ve daha sonra sütuna Arkasına sütun aktarmaktır.
Bu işe yarıyor gibi görünüyor, ancak ne kadar verimli? – Clay
@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
Teşekkürler! Bu bana çok yardımcı olacak. Bunun esnekliğini severim. – Clay