Thực thi tập lệnh SQLite


99

Tôi khởi động sqlite3 phiên bản 3.7.7, unix 11.4.2 bằng lệnh này:

sqlite3 auction.db

nơi đấu giá.db chưa được tạo.

sqlite> auction.db < create.sql;

cho tôi lỗi này: near "auction": syntax error

Làm cách nào để chạy script?

Câu trả lời:


127

Có nhiều cách để làm điều này, một trong những cách là:

sqlite3 auction.db

Theo dõi bởi:

sqlite> .read create.sql

Nói chung, dự án SQLite có tài liệu thực sự tuyệt vời! Tôi biết chúng ta thường tìm đến Google trước khi có tài liệu, nhưng trong trường hợp của SQLite, tài liệu thực sự là văn bản kỹ thuật tốt nhất. Nó sạch sẽ, rõ ràng và ngắn gọn.


4
Để sử dụng trong scritps, bạn có thể chạy các .readlệnh trực tiếp từ sqlite3lệnh: sqlite3 autction.db '.read create.sql'.
Cris Luengo

145

Bạn muốn đưa create.sqlvào sqlite3từ shell, không phải từ bên trong SQLite:

$ sqlite3 auction.db < create.sql

Phiên bản SQL của SQLite không hiểu <các tệp, trình bao của bạn thì có.


1
Thật không may, không phải tất cả các shell đều hiểu <là chuyển hướng đầu vào. (Ví dụ: PowerShell.)
Alan

@Alan PowerShell có một số cơ chế chuyển hướng đầu vào, phải không? Và nếu không, luôn cách tiếp cận của bitops .
mu quá ngắn.

@muistooshort xem nhận xét của tôi để bitops. Các lệnh chấm sqlite hoạt động trong tham số câu lệnh sql để bạn có thể. Đọc tệp bạn muốn mà không cần chuyển hướng đầu vào.
Chris Becke

@ChrisBecke chúng là những giải pháp khác nhau. <sẽ thoát khỏi lời nhắc SQLite ngay lập tức và trả lại mã lỗi cho trình bao. .read file.sqlsẽ để lời nhắc lên và -init file.sqlsẽ luôn trả về 0, vì vậy <là tốt nhất cho việc viết kịch bản. Ngoài ra, nó đa nền tảng không giống như .readkhông hỗ trợ đường dẫn Windows.
TWiStErRob

23

Để thực hiện các truy vấn đơn giản và quay lại tập lệnh shell của tôi, tôi nghĩ điều này hoạt động tốt:

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

2
Đây là câu trả lời hiệu quả mu là quá ngắn .
Đại tá Ba mươi Hai

11
@ColonelThirtyTwo Vâng, câu trả lời này rất gần với mu , câu trả lời là quá ngắn . Lý do tôi thêm vào một câu trả lời thêm là để chứng minh một phương pháp để nhanh chóng thực hiện một lệnh nội tuyến, chứ không phải lấy bước bổ sung của việc tạo ra một file SQL để lưu trữ các lệnh trong.
remeika

5
@remeika Tôi nghĩ rằng cách thành ngữ hơn để thực thi một lệnh inline sẽ sqlite3 example.db 'SELECT * FROM some_table;', chứ không phải là đường ống một tiếng vang
Christopher Shroba

1
Ngoài ra, (sau khi chỉnh sửa), nó chứng tỏ rằng sqlite3đọc các lệnh để thực thi không chỉ từ stdinmà còn từ đối số cuối cùng.
Rafael Almeida

4

Đối với những người sử dụng PowerShell

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

2

Nếu bạn đang sử dụng Windows CMD, bạn có thể sử dụng lệnh này để tạo cơ sở dữ liệu bằng sqlite3

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

Nếu bạn chưa có cơ sở dữ liệu với tên đó, sqlite3 sẽ tạo một cơ sở dữ liệu và nếu bạn đã có, nó sẽ chạy nó bất cứ lúc nào nhưng với lỗi "TABLENAME đã tồn tại", tôi nghĩ bạn cũng có thể sử dụng lệnh này để thay đổi một cơ sở dữ liệu (nhưng tôi không chắc)

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.