ATTACH で開かれた SQLite データベース ファイル内のテーブルを一覧表示するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/82875

  •  01-07-2019
  •  | 
  •  

質問

SQLite データベース ファイル内のテーブルとそれらのテーブル内の行をリストするために使用できる SQL は何ですか。 ATTACH SQLite 3コマンドラインツールのコマンド?

役に立ちましたか?

解決

.tables, 、 そして .schema 「ヘルパー」関数は、ATTACH されたデータベースを調べません。彼らは単にクエリを実行するだけです 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';

他のヒント

SQLite データベース内のテーブルを表示するには、いくつかの手順があります。

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

    .tables
    
  2. テーブルがどのように見えるかをリストします。

    .schema tablename
    
  3. 表全体を出力します。

    SELECT * FROM tablename;
    
  4. 使用可能な SQLite プロンプト コマンドをすべてリストします。

    .help
    

を通過する必要があるようです sqlite_master テーブルは次のようになります。

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

次に、各テーブルを手動で調べます。 SELECT または同様の方法で行を確認します。

.DUMP そして .SCHEMA コマンドはデータベースをまったく参照していないようです。

すべてのテーブルを表示するには、次を使用します

SELECT name FROM sqlite_master WHERE type = "table"

すべての行を表示するには、すべてのテーブルを反復処理し、それぞれに対して SELECT * を実行するだけだと思います。しかし、もしかしたらあなたが探しているのはダンプかもしれません?

使用 .help 使用可能なコマンドを確認します。

.table

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

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

テーブルをリストするには、次のようにすることもできます。

SELECT name FROM sqlite_master
WHERE type='table';

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

このクエリを使用して取得します。

SELECT name FROM sqlite_master WHERE type='table'

iOS で使用するには:

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

による ドキュメンテーション, 、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 答え。

SQLite 3 の最新バージョンでは、以下を発行できます。

.fullschema

すべての create ステートメントを表示します。

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

それで...(OS のコマンド ライン プロンプトが $ であると仮定します) $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump

使用:

import sqlite3

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

経由 union all, 、すべてのテーブルを 1 つのリストに結合します。

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

SQLite の公式リファレンスについては誰も言及していないので、次の見出しで参照すると役に立つと思います。

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

このリンクで説明されているコマンドを使用してデータベースを操作できます。その上、 Windows OSを使用している場合 コマンド シェルがどこにあるのか、つまり 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 ファイルと同じフォルダーに移動すると便利だと思います。このように、.db ファイルへの Python ファイルの書き込みと .db ファイルからの SQLite シェルの読み取りは同じパスにあります。

「.schema」コマンドは、テーブルの作成に使用されたステートメントを表示することにより、使用可能なテーブルとその行をリストします。

sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);

.da すべてのデータベースを表示します - 1 つは '主要'

このデータベースのテーブルは次のようにして見ることができます

sqlite_master から 1 ずつ異なる tbl_name を選択します。

接続されたデータベースには、ATTACH ステートメントの AS で選択したプレフィックスが必要です。 ああ (、bb、cc...) だから:

別の tbl_name を SELECT してください aa.sqlite_master 1 ずつ注文します。

ここではビューも取得されることに注意してください。これらを除外するには、 ここで、タイプ = 'テーブル' 「注文」の前に

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top