web-development-kb-asia.site

Làm cách nào để liệt kê các bảng trong tệp cơ sở dữ liệu SQLite đã được mở bằng ATTACH?

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?

1113
izb

Các hàm .tables.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';
524
Anthony Williams

Có một vài bước để xem các bảng trong cơ sở dữ liệu SQLite:

  1. Liệt kê các bảng trong cơ sở dữ liệu của bạn:

    .tables
    
  2. Liệt kê bảng trông như thế nào:

    .schema tablename
    
  3. In toàn bộ bảng:

    SELECT * FROM tablename;
    
  4. Liệt kê tất cả các lệnh Nhắc SQLite có sẵn:

    .help
    
1233
Mark Janssen

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.SCHEMA hoàn toàn không xuất hiện để xem cơ sở dữ liệu.

433

Để 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?

153
Christian Davén

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.

68
Antony.H

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
40
flubba

Để liệt kê các bảng bạn cũng có thể làm:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

Hãy thử PRAGMA table_info(table-name);
[.__.] http://www.sqlite.org/pragma.html#schema

29
Luiz Geron

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'"];
19
GameLoading

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.

15
Alix Axel

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.

15
pepper

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
11
Noah

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'
9
openwonk

Sử dụng:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
Mrityunjay Singh

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.

7
oiyio

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); [.__ .__.]
5
trf

.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'

1
Klaas-Z4us-V