Jalankan skrip SQLite

102

Saya memulai sqlite3 versi 3.7.7, unix 11.4.2 menggunakan perintah ini:

sqlite3 auction.db

dimana auction.db belum dibuat.

sqlite> auction.db < create.sql;

beri saya kesalahan ini: near "auction": syntax error

Bagaimana cara menjalankan skrip?

Rose Perrone
sumber

Jawaban:

128

Ada banyak cara untuk melakukan ini, salah satunya adalah:

sqlite3 auction.db

Diikuti oleh:

sqlite> .read create.sql

Secara umum, proyek SQLite memiliki dokumentasi yang sangat fantastis! Saya tahu kami sering menggunakan Google sebelum dokumen, tetapi dalam kasus SQLite, dokumen benar-benar merupakan penulisan teknis yang terbaik. Bersih, jelas, dan ringkas.

bitops
sumber
5
Untuk penggunaan di scritps, Anda dapat menjalankan .readperintah langsung dari sqlite3perintah: sqlite3 autction.db '.read create.sql'.
Cris Luengo
148

Anda ingin memasukkan create.sqlke dalam sqlite3dari shell, bukan dari dalam SQLite itu sendiri:

$ sqlite3 auction.db < create.sql

Versi SQLite dari SQL tidak memahami <file, shell Anda mengerti .

mu terlalu pendek
sumber
1
Sayangnya, tidak semua shell memahami <pengalihan input. (Misalnya, PowerShell.)
Alan
@Alan PowerShell memiliki beberapa mekanisme pengalihan input, bukan? Dan jika tidak selalu ada pendekatan bitops .
mu terlalu pendek
@muistooshort lihat komentar saya untuk bitops. Perintah sqlite dot bekerja dalam parameter pernyataan sql sehingga Anda dapat. Membaca file yang Anda inginkan tanpa menggunakan pengalihan input.
Chris Becke
@ChrisBe mereka adalah solusi yang berbeda. <akan segera keluar dari prompt SQLite dan mengembalikan kode kesalahan ke shell. .read file.sqlakan meninggalkan prompt dan -init file.sqlakan selalu mengembalikan 0, jadi <yang terbaik untuk scripting. Juga lintas platform tidak seperti .readyang tidak mendukung jalur Windows.
TWiStErRob
24

Untuk menjalankan kueri sederhana dan kembali ke skrip shell saya, saya pikir ini berfungsi dengan baik:

$ sqlite3 example.db 'SELECT * FROM some_table;'
remeika
sumber
2
Ini secara efektif mu adalah jawaban yang terlalu pendek .
Kolonel Tiga Puluh Dua
12
@ColonelThirtyTwo Ya, ini sangat dekat dengan mu , jawaban terlalu pendek . Alasan saya menambahkan jawaban tambahan adalah untuk mendemonstrasikan metode untuk mengeksekusi perintah inline dengan cepat, daripada mengambil langkah tambahan membuat file SQL untuk menyimpan perintah di.
remeika
5
@remeika Saya pikir cara yang lebih idiomatis untuk mengeksekusi perintah sebaris adalah sqlite3 example.db 'SELECT * FROM some_table;', daripada
menyuarakan
1
Juga, (setelah edit), ini menunjukkan bahwa sqlite3membaca perintah untuk dieksekusi tidak hanya dari stdin, tetapi juga dari argumen terakhir.
Rafael Almeida
4

Bagi mereka yang menggunakan PowerShell

PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db
pim
sumber
2

Jika Anda menggunakan CMD windows, Anda dapat menggunakan perintah ini untuk membuat database menggunakan sqlite3

C:\sqlite3.exe DBNAME.db ".read DBSCRIPT.sql"

Jika Anda tidak memiliki database dengan nama itu sqlite3 akan membuatnya, dan jika Anda sudah memilikinya, itu akan tetap berjalan tetapi dengan kesalahan "TABLENAME sudah ada", saya pikir Anda juga dapat menggunakan perintah ini untuk mengubah yang sudah ada database (tapi saya tidak yakin)

David Brun
sumber