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?

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.


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 .


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;'

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

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)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.