Xuất từ ​​sqlite sang csv bằng cách sử dụng shell script


88

Tôi đang tạo một tập lệnh shell để xuất truy vấn sqlite sang tệp csv, giống như sau:

 #!/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"

Khi thực thi tập lệnh, kết quả xuất hiện trên màn hình, thay vì được lưu vào "out.csv". Nó đang hoạt động theo cùng một phương pháp với dòng lệnh, nhưng tôi không biết tại sao tập lệnh shell không xuất được dữ liệu sang tệp.

Tôi đang làm gì sai?

Câu trả lời:


125

sqlite3

Bạn có một cuộc gọi riêng sqlite3cho mỗi dòng; vào thời điểm bạn selectchạy, của bạn .out out.csvđã bị lãng quên.

Thử:

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

thay thế.

phương pháp sh / bash

Bạn có thể gọi tập lệnh của mình với chuyển hướng:

$ your_script >out.csv

hoặc bạn có thể chèn dòng sau làm dòng đầu tiên trong tập lệnh của mình:

exec >out.csv

Phương pháp trước đây cho phép bạn chỉ định các tên tệp khác nhau, trong khi phương pháp sau xuất ra một tên tệp cụ thể. Trong cả hai trường hợp, dòng .output out.csvcó thể được bỏ qua.


Tuyệt vời, cảm ơn, bây giờ nó đang hoạt động! (và nó là cần thiết ">>" thay vì ">", nhưng tôi là một newbei trong linux: D)
Rorro

1
Nếu một câu trả lời ở đây thực sự trả lời câu hỏi của bạn, bạn nên nhấp vào dấu kiểm bên dưới tổng số phiếu bầu của câu trả lời (nó sẽ có màu xám nhạt đối với bạn). Điều này đánh dấu câu hỏi đã được trả lời.
tzot

Xin lỗi vì sự chậm trễ, tôi là một newbie thực thực: D
Rorro

<<! ... !là chính xác những gì tôi cần. Cảm ơn.
Rostyslav Druzhchenko

172

Thay vì các lệnh dấu chấm, bạn có thể sử dụng các tùy chọn lệnh sqlite3:

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

Điều này làm cho nó trở thành một lớp lót.

Ngoài ra, bạn có thể chạy tệp script sql:

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

Sử dụng sqlite3 -helpđể xem danh sách các tùy chọn có sẵn.


3
Nhiều, tốt hơn nhiều ... đây phải là giải pháp được chấp nhận! KISS :-)
pvandenberk

5
Giải pháp này cũng sẽ hoạt động trên windows, với điều kiện sqlite3 nằm trên đường dẫn của bạn hoặc trong cùng một thư mục.
amenthes

7

Gần đây tôi đã tạo một tập lệnh shell có thể lấy các bảng từ tệp db và chuyển đổi chúng thành tệp csv.

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

Vui lòng hỏi tôi bất kỳ câu hỏi nào về kịch bản của tôi :)


3
Điều này đã giúp tôi. Bạn nên sao chép và dán 10 dòng mã vào câu trả lời của mình, thì sự ủng hộ mà tôi đã đưa ra sẽ cảm thấy hợp lý hơn.
mxmlnkn

Tập lệnh bị thiếu dấu ngoặc kép xung quanh tên của bảng (nó gây ra lỗi nếu tên bảng có dấu gạch ngang)
Eric F.

0

Mặc dù câu hỏi là về shell script, nhưng tôi nghĩ nó sẽ giúp ích cho một số người chỉ bận tâm về việc chuyển dữ liệu từ cơ sở dữ liệu sqlite3 sang tệp csv.

Tôi đã tìm thấy một cách rất hữu ích để làm điều đó với trình duyệt firefox bằng cách sử dụng tiện ích mở rộng SQLite Manager.

Đơn giản chỉ cần kết nối với tệp cơ sở dữ liệu sqlite của bạn trong firefox (trình quản lý SQlite -> kết nối cơ sở dữ liệu) và sau đó Bảng -> Xuất bảng. Bạn sẽ được phục vụ với một số tùy chọn khác mà bạn có thể chỉ cần nhấp và thử ....

Cuối cùng, bạn nhận được một tệp csv với bảng u đã chọn để xuất.


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

Bây giờ hãy tìm kiếm trong hệ thống của bạn tệp example.csv và bạn sẽ nhận được nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.