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?
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:
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.
Bạn muốn đưa create.sql
vào sqlite3
từ 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ó.
<
là chuyển hướng đầu vào. (Ví dụ: PowerShell.)
<
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.sql
sẽ để lời nhắc lên và -init file.sql
sẽ 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ư .read
không hỗ trợ đường dẫn Windows.
Để 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;'
sqlite3 example.db 'SELECT * FROM some_table;'
, chứ không phải là đường ống một tiếng vang
sqlite3
đọc các lệnh để thực thi không chỉ từ stdin
mà còn từ đối số cuối cùng.
Đối với những người sử dụng PowerShell
PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db
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)
.read
lệnh trực tiếp từsqlite3
lệnh:sqlite3 autction.db '.read create.sql'
.