เรียกใช้สคริปต์ SQLite


105

ฉันเริ่ม sqlite3 เวอร์ชัน 3.7.7, unix 11.4.2 โดยใช้คำสั่งนี้:

sqlite3 auction.db

โดยที่ยังไม่ได้สร้างการประมูล.db

sqlite> auction.db < create.sql;

ทำให้ฉันมีข้อผิดพลาดนี้: near "auction": syntax error

ฉันจะเรียกใช้สคริปต์ได้อย่างไร

คำตอบ:


134

มีหลายวิธีในการดำเนินการวิธีหนึ่งคือ:

sqlite3 auction.db

ติดตามโดย:

sqlite> .read create.sql

โดยทั่วไปโครงการ SQLite มีเอกสารที่ยอดเยี่ยมจริงๆ! ฉันรู้ว่าเรามักจะเข้าถึง Google ก่อนเอกสาร แต่ในกรณีของ SQLite เอกสารเป็นการเขียนเชิงเทคนิคที่ดีที่สุด มันสะอาดชัดเจนและรัดกุม


6
เพื่อใช้ในการ scritps คุณสามารถเรียกใช้.readคำสั่งโดยตรงจากคำสั่ง:sqlite3 sqlite3 autction.db '.read create.sql'
Cris Luengo

152

คุณต้องการป้อนcreate.sqlเข้าsqlite3จากเชลล์ไม่ใช่จากภายใน SQLite เอง:

$ sqlite3 auction.db < create.sql

SQLite เวอร์ชันของ SQLite ไม่เข้าใจ<สำหรับไฟล์เชลล์ของคุณทำ


1
น่าเสียดายที่เชลล์บางตัวไม่เข้าใจ<ว่าเป็นการเปลี่ยนเส้นทางอินพุต (เช่น PowerShell.)
Alan

@Alan PowerShell มีกลไกการเปลี่ยนทิศทางอินพุตใช่หรือไม่? และถ้าไม่มีก็มีแนวทางของ bitopsเสมอ
สั้นเกินไป

@muistooshort ดูความคิดเห็นของฉันที่ bitops คำสั่ง sqlite dot ทำงานในพารามิเตอร์คำสั่ง sql เพื่อให้คุณสามารถ. อ่านไฟล์ที่คุณต้องการโดยไม่ต้องใช้การเปลี่ยนทิศทางอินพุต
Chris Becke

@ChrisBecke เป็นทางออกที่แตกต่างกัน <จะออกจากพรอมต์ SQLite ทันทีและส่งคืนรหัสข้อผิดพลาดไปยังเชลล์ .read file.sqlจะปล่อยให้พรอมต์ขึ้นและ-init file.sqlจะคืนค่า 0 เสมอดังนั้นจึง<ดีที่สุดสำหรับการเขียนสคริปต์ นอกจากนี้ยังข้ามแพลตฟอร์ม.readซึ่งแตกต่างจากที่ไม่รองรับเส้นทาง Windows
TWiStErRob

24

ในการดำเนินการค้นหาอย่างง่ายและกลับไปที่เชลล์สคริปต์ของฉันฉันคิดว่าสิ่งนี้ใช้ได้ดี:

$ sqlite3 example.db 'SELECT * FROM some_table;'

2
นี่คือคำตอบที่สั้นเกินไป
พันเอกสามสิบสอง

12
@ColonelThirtyTwo ใช่นี่ใกล้มากแล้วคำตอบสั้นเกินไป เหตุผลที่ฉันเพิ่มคำตอบเพิ่มเติมคือการสาธิตวิธีการดำเนินการคำสั่งแบบอินไลน์อย่างรวดเร็วแทนที่จะทำตามขั้นตอนเพิ่มเติมในการสร้างไฟล์ SQL เพื่อจัดเก็บคำสั่ง
remeika

5
@remeika ฉันคิดว่าวิธีที่เป็นสำนวนมากกว่าในการดำเนินการคำสั่งแบบอินไลน์น่าจะเป็นsqlite3 example.db 'SELECT * FROM some_table;'มากกว่าการส่งสัญญาณสะท้อน
Christopher Shroba

1
นอกจากนี้ (หลังการแก้ไข) ยังแสดงให้เห็นว่าsqlite3อ่านคำสั่งเพื่อดำเนินการไม่เพียง แต่จากstdinแต่ยังมาจากอาร์กิวเมนต์สุดท้ายด้วย
Rafael Almeida


2

หากคุณใช้ Windows CMD คุณสามารถใช้คำสั่งนี้เพื่อสร้างฐานข้อมูลโดยใช้ sqlite3

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

หากคุณไม่มีฐานข้อมูลที่มีชื่อนั้น sqlite3 จะสร้างขึ้นมาใหม่และหากคุณมีอยู่แล้วก็จะเรียกใช้ฐานข้อมูลได้ แต่ด้วยข้อผิดพลาด "TABLENAME ที่มีอยู่แล้ว" ฉันคิดว่าคุณยังสามารถใช้คำสั่งนี้เพื่อเปลี่ยนที่มีอยู่แล้ว ฐานข้อมูล (แต่ไม่แน่ใจ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.