SQL nào có thể được sử dụng để liệt kê các bảng và các hàng trong các bảng đó trong tệp cơ sở dữ liệu SQLite - một khi tôi đã đính kèm nó với lệnh ATTACH
trên công cụ dòng lệnh SQLite 3?
Các hàm .tables
và .schema
"helper" không xem xét cơ sở dữ liệu ATTACHed: họ chỉ truy vấn bảng SQLITE_MASTER
cho cơ sở dữ liệu "chính". Do đó, nếu bạn sử dụng
ATTACH some_file.db AS my_db;
sau đó bạn cần phải làm
SELECT name FROM my_db.sqlite_master WHERE type='table';
Lưu ý rằng các bảng tạm thời không hiển thị với .tables
: bạn phải liệt kê sqlite_temp_master
cho điều đó:
SELECT name FROM sqlite_temp_master WHERE type='table';
Có một vài bước để xem các bảng trong cơ sở dữ liệu SQLite:
Liệt kê các bảng trong cơ sở dữ liệu của bạn:
.tables
Liệt kê bảng trông như thế nào:
.schema tablename
In toàn bộ bảng:
SELECT * FROM tablename;
Liệt kê tất cả các lệnh Nhắc SQLite có sẵn:
.help
Có vẻ như bạn cần phải đi qua sqlite_master bảng, như thế này:
SELECT * FROM dbname.sqlite_master WHERE type='table';
Và sau đó tự đi qua từng bảng với một SELECT
hoặc tương tự để xem các hàng.
Các lệnh .DUMP
và .SCHEMA
hoàn toàn không xuất hiện để xem cơ sở dữ liệu.
Để hiển thị tất cả các bảng, sử dụng
SELECT name FROM sqlite_master WHERE type = "table"
Để hiển thị tất cả các hàng, tôi đoán bạn có thể lặp qua tất cả các bảng và chỉ cần thực hiện CHỌN * trên mỗi bảng. Nhưng có lẽ một DUMP là những gì bạn sau?
Sử dụng .help
để kiểm tra các lệnh có sẵn.
.table
Lệnh này sẽ hiển thị tất cả các bảng trong cơ sở dữ liệu hiện tại của bạn.
Có một lệnh có sẵn cho điều này trên dòng lệnh SQLite:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Chuyển đổi thành SQL sau:
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
Để liệt kê các bảng bạn cũng có thể làm:
SELECT name FROM sqlite_master
WHERE type='table';
Hãy thử PRAGMA table_info(table-name);
[.__.] http://www.sqlite.org/pragma.html#schema
Tôi sử dụng truy vấn này để có được nó:
SELECT name FROM sqlite_master WHERE type='table'
Và để sử dụng trong iOS:
NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
Theo tài liệu , tương đương với SHOW TABLES;
của MySQL là:
Lệnh ".tables" tương tự như cài đặt chế độ danh sách, sau đó thực hiện truy vấn sau:
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1;
Tuy nhiên, nếu bạn đang kiểm tra nếu một bảng duy nhất tồn tại (hoặc để biết chi tiết về nó), hãy xem @LuizGeron answer.
Kể từ phiên bản mới nhất của SQLite 3, bạn có thể phát hành:
.fullschema
để xem tất cả các báo cáo tạo của bạn.
Cách dễ nhất để làm điều này là mở trực tiếp cơ sở dữ liệu và sử dụng lệnh .dump
, thay vì đính kèm sau khi gọi công cụ SQLite 3 Shell.
Vì vậy, ... (giả sử dòng lệnh OS của bạn là $) thay vì $sqlite3
:
sqlite3> ATTACH database.sqlite as "attached"
Từ dòng lệnh OS của bạn, hãy mở cơ sở dữ liệu trực tiếp:
$sqlite3 database.sqlite
sqlite3> .dump
Thông qua một union all
, kết hợp tất cả các bảng vào một danh sách.
select name
from sqlite_master
where type='table'
union all
select name
from sqlite_temp_master
where type='table'
Sử dụng:
import sqlite3
TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
Vì không ai đề cập đến tài liệu tham khảo chính thức về SQLite, tôi nghĩ rằng có thể hữu ích khi đề cập đến nó dưới tiêu đề này:
https://www.sqlite.org/cli.html
Bạn có thể thao tác cơ sở dữ liệu của mình bằng các lệnh được mô tả trong liên kết này. Ngoài ra, nếu bạn đang sử dụng HĐH Windows và không biết lệnh Shell ở đâu, đó là trong trang web của SQLite:
https://www.sqlite.org/doad.html
Sau khi tải xuống, nhấp vào tệp sqlite3.exe để khởi tạo lệnh SQLite Shell . Khi được khởi tạo, theo mặc định, phiên SQLite này đang sử dụng cơ sở dữ liệu trong bộ nhớ, không phải tệp trên đĩa và do đó, tất cả các thay đổi sẽ bị mất khi phiên thoát. Để sử dụng tệp đĩa liên tục làm cơ sở dữ liệu, hãy nhập lệnh ".open ex1.db" ngay sau khi cửa sổ đầu cuối khởi động.
Ví dụ trên làm cho tệp cơ sở dữ liệu có tên "ex1.db" được mở và sử dụng và được tạo nếu nó không tồn tại trước đó. Bạn có thể muốn sử dụng một tên đường dẫn đầy đủ để đảm bảo rằng tệp nằm trong thư mục mà bạn nghĩ nó nằm trong. Sử dụng dấu gạch chéo chuyển tiếp làm ký tự phân tách thư mục. Nói cách khác, sử dụng "c: /work/ex1.db", không phải "c:\work\ex1.db".
Để xem tất cả các bảng trong cơ sở dữ liệu bạn đã chọn trước đó, hãy nhập lệnh .tables như được nói trong liên kết ở trên.
Nếu bạn làm việc trong Windows, tôi nghĩ có thể hữu ích khi di chuyển tệp sqlite.exe này vào cùng thư mục với các tệp Python khác. Theo cách này, tệp Python ghi vào và SQLite Shell đọc từ các tệp .db nằm trong cùng một đường dẫn.
Lệnh ".schema" sẽ liệt kê các bảng có sẵn và các hàng của chúng, bằng cách hiển thị cho bạn câu lệnh được sử dụng để tạo các bảng đã nói:
[.___] sqlite> tạo bảng_a (id int, a int, b int); [.__ .__.]
.da để xem tất cả các cơ sở dữ liệu - một cái gọi là ' chính '
bảng của cơ sở dữ liệu này có thể được nhìn thấy bởi
CHỌN tbl_name khác biệt từ thứ tự sqlite_master bằng 1;
Các cơ sở dữ liệu đính kèm cần tiền tố bạn đã chọn với AS trong câu lệnh ATTACH, ví dụ: aa (, bb, cc ...) vì vậy:
CHỌN tbl_name khác biệt từ aa.sqlite_master order by 1;
Lưu ý rằng ở đây bạn có được quan điểm là tốt. Để loại trừ những add where type = 'table' before 'order'