ส่งออกจาก sqlite เป็น csv โดยใช้เชลล์สคริปต์


89

ฉันกำลังสร้างเชลล์สคริปต์เพื่อส่งออกเคียวรี sqlite ไปยังไฟล์ csv เช่นนี้:

 #!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db ".headers on"
./bin/sqlite3 ./sys/xserve_sqlite.db ".mode csv"
./bin/sqlite3 ./sys/xserve_sqlite.db ".output out.csv"
./bin/sqlite3 ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;"
./bin/sqlite3 ./sys/xserve_sqlite.db ".exit"

เมื่อเรียกใช้สคริปต์เอาต์พุตจะปรากฏบนหน้าจอแทนที่จะบันทึกเป็น "out.csv" มันทำงานด้วยวิธีเดียวกันกับบรรทัดคำสั่ง แต่ฉันไม่รู้ว่าทำไมเชลล์สคริปต์จึงไม่สามารถส่งออกข้อมูลไปยังไฟล์ได้

ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


125

sqlite3

คุณมีการโทรแยกกันsqlite3สำหรับแต่ละสาย เมื่อถึงเวลาที่คุณselectวิ่งคุณ.out out.csvจะถูกลืม

ลอง:

#!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db <<!
.headers on
.mode csv
.output out.csv
select * from eS1100_sensor_results;
!

แทน.

วิธี sh / bash

คุณสามารถเรียกสคริปต์ของคุณด้วยการเปลี่ยนเส้นทาง:

$ your_script >out.csv

หรือคุณสามารถแทรกสิ่งต่อไปนี้เป็นบรรทัดแรกในสคริปต์ของคุณ:

exec >out.csv

วิธีการเดิมช่วยให้คุณระบุชื่อไฟล์ที่แตกต่างกันในขณะที่ผลลัพธ์หลังจะส่งไปยังชื่อไฟล์เฉพาะ ในทั้งสองกรณี.output out.csvสามารถละเว้นบรรทัดได้


ดีมากขอบคุณตอนนี้ใช้งานได้แล้ว! (และจำเป็น ">>" แทน ">" แต่ฉันเป็น newbei ใน linux: D)
Rorro

1
หากคำตอบที่นี่ตอบคำถามของคุณได้จริงคุณควรคลิกเครื่องหมายถูกด้านล่างผลโหวตทั้งหมดของคำตอบ (ควรปรากฏเป็นสีเทาอ่อนสำหรับคุณ) นี่คือเครื่องหมายคำถามที่ตอบแล้ว
tzot

ขออภัยในความล่าช้าฉันเป็นมือใหม่ตัวจริง: D
Rorro

<<! ... !คือสิ่งที่ฉันต้องการ ขอบคุณ.
Rostyslav Druzhchenko

174

แทนที่จะใช้คำสั่ง dot คุณสามารถใช้ตัวเลือกคำสั่ง sqlite3:

sqlite3 -header -csv my_db.db "select * from my_table;" > out.csv

ทำให้เป็นซับเดียว

นอกจากนี้คุณสามารถเรียกใช้ไฟล์สคริปต์ sql:

sqlite3 -header -csv my_db.db < my_script.sql > out.csv

ใช้sqlite3 -helpเพื่อดูรายการตัวเลือกที่มี


3
ดีกว่ามาก ... นี่ควรเป็นทางออกที่ยอมรับได้! KISS :-)
pvandenberk

5
โซลูชันนี้จะทำงานบน windows ได้เช่นกันเนื่องจาก sqlite3 อยู่ในเส้นทางของคุณหรือในไดเรกทอรีเดียวกัน
กำหนดการ

7

ฉันเพิ่งสร้างเชลล์สคริปต์ที่จะสามารถนำตารางจากไฟล์ db และแปลงเป็นไฟล์ csv

https://github.com/darrentu/convert-db-to-csv

อย่าลังเลที่จะถามคำถามใด ๆ เกี่ยวกับสคริปต์ของฉัน :)


3
สิ่งนี้ช่วยฉันได้ คุณควรคัดลอกและวางโค้ด 10 บรรทัดลงในคำตอบของคุณจากนั้นการเพิ่มคะแนนที่ฉันให้ไปแล้วจะรู้สึกสมเหตุสมผลมากขึ้น
mxmlnkn

สคริปต์ไม่มีเครื่องหมายคำพูดรอบ ๆ ชื่อของตาราง (จะแสดงข้อผิดพลาดหากชื่อตารางมีขีดกลาง)
Eric F.

0

แม้ว่าคำถามจะเกี่ยวกับเชลล์สคริปต์ แต่ฉันคิดว่ามันจะช่วยไม่กี่คนที่เพิ่งกังวลเกี่ยวกับการถ่ายโอนข้อมูลจากฐานข้อมูล sqlite3 ไปยังไฟล์ csv

ฉันพบวิธีที่สะดวกมากในการทำกับเบราว์เซอร์ firefox โดยใช้ส่วนขยาย SQLite Manager

เพียงเชื่อมต่อกับไฟล์ฐานข้อมูล sqlite ของคุณใน firefox (ตัวจัดการ SQlite -> เชื่อมต่อฐานข้อมูล) จากนั้นตาราง -> ตารางส่งออก คุณจะได้รับตัวเลือกเพิ่มเติมที่คุณสามารถคลิกและลอง ...

ในที่สุดคุณจะได้รับไฟล์ csv พร้อมตารางที่คุณเลือกที่จะส่งออก


0
Using command line for Linux:

user@dell-Admin: sqlite3 #activate your sqlite database first
sqlite> .tables #search for tables if any available if already created one.
sqlite> .schema #if you want to check the schema of the table.

# once you find your table(s), then just do the following:

sqlite> .headers on   #export along with headers (column names)
sqlite> .mode csv     #file type is csv
sqlite> .output example.csv   #you want to provide file name to export
sqlite> SELECT * from events;    #If entire table is needed or select only required
sqlite> .quit    #finally quit the sqlite3

ตอนนี้ค้นหาในระบบของคุณสำหรับไฟล์ example.csv และคุณจะได้รับ

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