2010-12-08 11 views
9

Verileri birden çok tablodan oluşan bir SQLite veritabanından dışa aktarmanın ve sonra bunları başka bir veritabanına almanın basit bir yoluna ihtiyacım var.Verileri Verme SQLite 3'ten

İşte benim senaryo. 5 tablom var: A, B, C, D, E.

Her tablonun, ID adı verilen ilk sütun olarak bir birincil anahtarı vardır. SADECE satırdaki verileri birincil anahtardan başka bir veritabanına alınabilen bir biçimde dökecek bir Unix komutu istiyorum.

Ben

sqlite3 db .dump | grep INSERT 

yapabileceğini biliyorum ama bu tablodaki bana TÜM verileri verir. Ben bir veritabanı uzmanı değilim ve bunu yapmak için C++ kodu yazmaktan ziyade bir kabuk betiği yazabildiğim tüm unix komutlarıyla bunu yapmaya çalışıyorum (çünkü insanların bana söylediği şey bu en kolay yol). . Komut satırından 4-5 ifadeyle yapılabilecek bir görevi yerine getirmek için C++ kodu yazmayı reddediyorum.

Herhangi bir öneriniz var mı?

+0

Sadece belirtildi ..... Tüm verilerden bir dökümü yaptım ve aynı veritabanına aktarmaya çalıştım. Birincil anahtarın benzersiz olması gerekir. Yani senaryonun benzersiz anahtarlar oluşturması gerekecek mi? Veya birincil anahtarı çıkarırsam ve otomatik artışa ayarlanırsa, bir ekleme işlemi benzersiz bir anahtar oluşturur? –

+0

Ayrıca, verilerin içe aktarılacağı tablo yapısı aynı olacaktır ve benzersiz verileriyle ilişkili olan 5 tablodan tüm verileri almam ve içe aktarmam gerekiyor. Dolayısıyla, tüm 5 tabloların veri sütunları ile 1 benzersiz bir kimliği varsa, bunu bir dosyaya aktarmam gerekiyor, daha sonra bunu başka bir sistemde aynı tablo yapısına (veritabanı dosyaları mevcut olacak) içeri aktarmalıyım. –

cevap

2

Sorgunuzu alıp bir CSV'ye dışa aktarabilecek bir araç bulmanızı önerin. Sen bir senaryo istediğin gibi geliyor. Bunu yeniden kullanmak ve otomatikleştirmek mi istediniz?

Diğer senaryolar için, belki de sqlite-manager Firefox plugin'u düşünün. Adju sorgularınızı çalıştırmayı ve sonuçları bir CSV'ye aktarmayı destekler. Bunun içinde

, bunu şu ifade vermek:

SELECT ID FROM TableA 

tekrarlayın her tablo için istediğiniz kadar.

+0

sqlite3 CSV içine dökülecek .... bu benim sorunum değil ve üçüncü taraf bir araç kullanamıyorum. Eşsiz kullanıcılar için tasarlanmış kapalı bir sistemdir (PC'ler değil). Sistem Unix'i işletim sistemi olarak kullanacak, dolayısıyla unix komut satırı çözümlerini bulma girişimi.Asıl amacım birincil anahtara dayalı olarak bir dosya biçiminde dışa aktarmak, daha sonra bu dosyayı başka bir benzer sisteme aktarmak ve verileri bu veritabanına aktarmak. –

0

SQLite'ın quote işlevini de kullanabilirsiniz.

orada ifadeleri aşağıdaki metin dosyasını ve yer oluşturun:

.mode insert 
.output insert.sql 
select * from TABLE where STATEMENT; -- place the needed select query here 
.output stdout 

Yem bu dosyayı Sqlite3 için:

echo "SELECT 'INSERT INTO my_new_table (my_new_key) VALUES (' || quote(my_old_key) || ');' FROM my_old_table;" | sqlite my_table > statements.sql 
+0

"Alıntı" hakkında daha fazla açıklama yapabilir misiniz? – Zulu

11

Bu biraz garip görünebilir, ancak bir deneyin olabilir

$ sqlite3 -init initf DATA.DB .schema > schema.sql 

Sonuç olarak iki dosya elde edersiniz: bir tanesi basit "ekler" (inser t.sql) ve db şema ile başka (şema.sql).

+4

Mod değiştirirken tablo adını eklemenizi öneririm: '. Mode insert TABLE'. Bu, oluşturulan insert ifadelerinde tablo adını içermesini sağlayacaktır. – Brigham