2013-02-15 11 views
6

+20 saatlik Python kodlama ve komut satırı ile acemi yakınlığı ile bir başlangıç ​​programcısı olarak, Zed Shaw'ın "SQL The Hard Way'ı Öğren" 'i açtım ve çabucak güldü. exercise 01 yılındaSQL öğrenin Zor yol - SQL Lite 3 ile .db oluşturma .sql - Neden ve Nasıl?

Zed bu ilk komutla İlk tablo oluşturmak vardır:

sqlite3 ex1.db < ex1.sql 

Ancak bu hata mesajını vererek, benim komut satırı çalıştırmak için başarısız "-bash: ex1.sql: Böyle bir dosya ya da dizin yok." Başlangıçta, ben bu kodu tavsiye ihmal ve birlikte hareket ediyordu:

-rw-r--r-- 1 thefifth staff 2048 Feb 15 15:23 ex1.db 

Ama ne istediğim ve almak için başarısız am geçerli::

sqlite3 ex1.db 
SQLite version 3.7.15.1 2012-12-19 20:39:10 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> CREATE TABLE person (
    ...>  id INTEGER PRIMARY KEY, 
    ...>  first_name TEXT, 
    ...>  last_name TEXT, 
    ...>  age INTEGER 
    ...>); 

Running komut satırına "ls -l komutunun" gösterir

Etrafa Googled ve aynı "name.db < name.sql" sözdizimi uygular, ancak kod boyunca aşağıdaki burada yazsam işe yaramadı this blog bulundu
$ ls -l 
-rw-r--r-- 1 zedshaw staff 2048 Nov 8 16:18 ex1.db 
-rw-r--r-- 1 zedshaw staff 92 Nov 8 16:14 ex1.sql 

. Bu Stack Overflow da benzer bir sözdizimine sahiptir, ancak .sql ile sqlite3 arasında dönüştürme bağlamında.

Özellikle, bu, anadolu terminalinde kullanmak için "<" olup olmadığını ve doğru kullanımı için belirli ölçütleri karşılamada başarısız olduğumu merak ediyorum. Ayrıca, görünüşe göre biri diğerinden çok daha küçük olmasına rağmen, .sql ve .db dosyası oluşturma amacını bilmiyorum. Belki sqlite3'ü yanlış yükledim, ancak iyi çalışıyor gibi görünüyor.

Yardımlarınız için teşekkürler!

cevap

6
  1. Sonra terminalde
  2. .Sql uzantılı bir dosyaya kodunuzu kaydedin: sqlite3 ex1.db < ex1.sql için ter koyun bir ex1.db
  3. oluşturmak minal: sqlite3 ex1.db .schema
  4. Veya şunu yapın: sqlite3 ex1.db [... ve sonra ....] .schema
+0

İki yanıttan, bu cevap daha çok Zed'in cevabına benziyordu, ancak 2048 dosyası bir şekilde bir .dv biçimi olarak oluşturulmuştu, en azından bir veritabanı biçimindeydi. Teşekkürler! – surrealdetective

10
sqlite3 ex1.db < ex1.sql 

Yukarıdakilerin çalışması için, ex1.sql zaten mevcut olmalıdır. <, giriş yönlendirmesi için kabuklarda kullanılan bir karakterdir. sqlite3, yeni veya mevcut bir veritabanıyla (ihtiyaç duyulduğunda veritabanını oluşturacaktır) burada başlatılır ve ex1.sql'dan SQL ifadeleri alır ve bunları uygulayarak ex1.db'u değiştirir.

Şimdi görünüşe göre yapmak istiyorum ex1.db den ex1.sql oluşturmak atalım:

sqlite3 ex1.db .dump > ex1.sql 

Şimdi ex1.sql için çıkışını yönlendirme, yine kabuk yönlendirme özelliğini kullanın. tablolar yeniden ve INSERT ile doldurulur, vb Şimdi

Eğer 1. adıma gidebilirsiniz:

sqlite3 ex1copy.db < ex1.sql 
.dump komut onlar boş bir veritabanında yürütür zaman benzer veritabanı baştan yaratacak SQL ifadelerini yazmak sqlite yapar
+0

Açık yanıt için teşekkürler! Tamamen yardımcı. – surrealdetective

2

Bugün aynı sorunla karşılaştım ve sizin gibi benim komutumun neden çalışmadığını merak ettim. Yukarıda belirtildiği gibi, yazar, bir metin düzenleyicisinde başlangıç ​​komutunu oluşturduğunuzu ve bir .sql dosyası olarak kaydettiğinizi varsayar. Ve sonra ex1.db < ex1.sql komutu dosyayı bir .db dosyasına dönüştürür.