web-dev-qa-db-ja.com

ATTACHで開かれたSQLiteデータベースファイルのテーブルを一覧表示する方法

SQLiteデータベースファイルのテーブルとそれらのテーブル内の行を一覧表示するために使用できるSQL - SQLite 3コマンドラインツールのATTACHコマンドで添付した後は?

1113
izb

.tables.schemaの "helper"関数はATTACHされたデータベースを調べません。それらは単に "main"データベースのためにSQLITE_MASTERテーブルを問い合わせるだけです。その結果、あなたが使用した場合

ATTACH some_file.db AS my_db;

それならあなたはする必要があります

SELECT name FROM my_db.sqlite_master WHERE type='table';

一時テーブルも.tablesと一緒に表示されないことに注意してください。そのためにはsqlite_temp_masterをリ​​ストする必要があります。

SELECT name FROM sqlite_temp_master WHERE type='table';
524

SQLiteデータベースのテーブルを見るためのいくつかのステップがあります。

  1. データベース内のテーブルを一覧表示します。

    .tables
    
  2. テーブルの外観を一覧表示します。

    .schema tablename
    
  3. テーブル全体を印刷します。

    SELECT * FROM tablename;
    
  4. 利用可能なすべてのSQLiteプロンプトコマンドを一覧表示します。

    .help
    
1233
Mark Janssen

このように、 sqlite_master テーブルを通過する必要があるようです。

SELECT * FROM dbname.sqlite_master WHERE type='table';

そして、手動で各テーブルをSELECTなどで調べて行を調べます。

.DUMPおよび.SCHEMAコマンドは、データベースをまったく認識していないようです。

すべてのテーブルを表示するには、

SELECT name FROM sqlite_master WHERE type = "table"

すべての行を表示するには、すべてのテーブルを反復処理して、各テーブルに対してSELECT *を実行するだけでよいと思います。しかし、おそらくダンプはあなたが求めているものですか?

153

利用可能なコマンドを確認するには.helpを使用してください。

.table

このコマンドは、現在のデータベースの下にあるすべてのテーブルを表示します。

68
Antony.H

SQLiteコマンドラインでこれに利用できるコマンドがあります:

.tables ?PATTERN?      List names of tables matching a LIKE pattern

これは次のSQLに変換されます。

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

テーブルを一覧表示するには、次のようにすることもできます。

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

PRAGMA table_info(table-name);を試す
http://www.sqlite.org/pragma.html#schema

29
Luiz Geron

私はそれを取得するためにこのクエリを使用します。

SELECT name FROM sqlite_master WHERE type='table'

そしてiOSで使うには:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
19
GameLoading

ドキュメント によると、MySQLのSHOW TABLES;と同等のものは次のとおりです。

".tables"コマンドは、リストモードを設定してから次のクエリを実行するのと似ています。

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;

ただし、単一のテーブルが存在するかどうか(またはその詳細を取得するため)を確認している場合は、 @LuizGeron answerを参照してください。

15
Alix Axel

SQLite 3の最新版の時点であなたが発行することができます:

.fullschema

すべてのcreateステートメントを見るために。

15
pepper

これを行う最も簡単な方法は、SQLite 3シェルツールを呼び出した後にアタッチするのではなく、データベースを直接開いて.dumpコマンドを使用することです。

$sqlite3の代わりに...(あなたのOSのコマンドラインプロンプトが$であると仮定):

sqlite3> ATTACH database.sqlite as "attached"

OSのコマンドラインからデータベースを直接開きます。

$sqlite3 database.sqlite
sqlite3> .dump
11
Noah

union allを介して、すべてのテーブルを1つのリストにまとめます。

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
9
openwonk

つかいます:

import sqlite3

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

誰もSQLiteの公式な言及について言及していないので、私はこの見出しの下でそれを参照することが役に立つかもしれないと思います:

https://www.sqlite.org/cli.html

このリンクに記載されているコマンドを使用してデータベースを操作できます。また、 Windows OSを使用している場合 で、コマンドShellがどこにあるのかわからない場合は、SQLiteのサイトにあります。

https://www.sqlite.org/download.html

それをダウンロードした後、 sqlite3.exeファイルをクリックしてSQLiteコマンドシェルを初期化します 。初期化されると、デフォルトではこのSQLiteセッションはディスク上のファイルではなくインメモリデータベースを使用するため、セッションが終了するとすべての変更は失われます。永続ディスクファイルをデータベースとして使用するには、ターミナルウィンドウが起動した直後に「.open ex1.db」コマンドを入力します。

上記の例では、 "ex1.db"という名前のデータベースファイルが開かれて使用され、以前に存在しない場合は作成されます。ファイルがあると思うディレクトリに確実に存在するように、絶対パス名を使用することをお勧めします。ディレクトリの区切り文字としては、スラッシュを使用してください。つまり、 "c:\ work\ex1.db"ではなく、 "c:/work/ex1.db"を使用してください。

以前に選択したデータベース内のすべてのテーブルを表示するには、上記のリンクで説明されているように、コマンド .tables を入力します。

Windowsで作業している場合は、このsqlite.exeファイルを他のPythonファイルと同じフォルダーに移動すると便利かもしれません。このように、Pythonファイルは.dbファイルに書き込みを行い、SQLiteシェルは.dbファイルからの読み取りを同じパスに入れます。

7
oiyio

".schema"コマンドは、利用可能なテーブルとその行を一覧表示します。そのテーブルを作成するためのステートメントを表示します。

 sqlite> create table_a(id、int、b int); 
 sqlite> .schema table_a 
 CREATE TABLE table_a(id、int、b int); [ ]
5
trf

すべてのデータベースを見るための.da - 'main'という名前のもの

このデータベースのテーブルは、

Sqlite_masterの順序とは異なるtbl_nameを1つずつSELECTします。

アタッチされたデータベースには、ATTACHステートメントでASで選択した接頭辞が必要です。 aa(、bb、cc ...)

1からaa.sqlite_masterの順序で異なるtbl_nameを選択します。

ここでもビューが表示されます。これらを除外するには、 'order'の前にwhere type = 'table'を追加します。

1
Klaas-Z4us-V