web-dev-qa-db-ja.com

SQLiteデータベースのテーブルの列のリストを取得するにはどうすればよいですか?

テーブル内の列のリストを取得しようとしています。データベースはSQLiteの最新リリースです(3.6、私は信じています)。 SQLクエリでこれを行うコードを探しています。列に関連するメタデータの追加ボーナスポイント(長さ、データ型など)

90
AngryHacker

探しているものはデータ辞書と呼ばれます。 sqliteでは、sqlite_masterテーブル(またはビュー?)を照会することにより、すべてのテーブルのリストを見つけることができます。

_sqlite> create table people (first_name varchar, last_name varchar, email_address varchar);
sqlite> select * from sqlite_master;
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar)
_

列情報を取得するには、pragma table_info(table_name)ステートメントを使用できます。

_sqlite> pragma table_info(people);
0|first_name|varchar|0||0
1|last_name|varchar|0||0
2|email_address|varchar|0||0
_

プラグマステートメントの詳細については、 documentation を参照してください。

119
Bryan Kyle

簡単な方法は次のとおりです。

.schema <table>
47
ifightcrime

質問は古いですが、以下はまだ言及されていません。

多くの場合、別の便利な方法は次の方法でヘッダーを有効にすることです。

sqlite> .headers on

次に、

sqlite> SELECT ... FROM table

出力の上部に、選択したすべてのフィールド(SELECT *の場合はすべて)を示す見出しが表示されます。

21
inVader

sqliteシェルに移動するだけです。

$ sqlite3 path/to/db.sqlite3

そして、ちょうどヒット

sqlite> .schema

そして、あなたはすべてを手に入れるでしょう。

16
Majd Taby

現在のデータベース内のすべてのテーブルと列をリストするSELECTステートメントは次のとおりです。

SELECT m.name as tableName, 
       p.name as columnName
FROM sqlite_master m
left outer join pragma_table_info((m.name)) p
     on m.name <> p.name
order by tableName, columnName
;
9
David Garoutte

これは、OPが要求した(ボーナスポイントとして)各列について取得できるすべてのメタデータと列を含むすべてのテーブルをリストするクエリです。

SELECT
  m.name AS table_name, 
  p.cid AS col_id,
  p.name AS col_name,
  p.type AS col_type,
  p.pk AS col_is_pk,
  p.dflt_value AS col_default_val,
  p.[notnull] AS col_is_not_null
FROM sqlite_master m
LEFT OUTER JOIN pragma_table_info((m.name)) p
  ON m.name <> p.name
WHERE m.type = 'table'
ORDER BY table_name, col_id

pragma_table_infoクエリで動作します。

このクエリを実行して、すべてのテーブルメタデータを表示します。

SELECT * sqlite_master WHERE type = 'table'
4
lewdev

上記に基づいて、一度にすべてを実行できます。

sqlite3 yourdb.db ".schema"

これにより、テーブルを作成するSQLが得られます。これは事実上、列のリストです。

1
some ideas

久しぶりですが、遅すぎることはありません…通訳としてTCLに同様の質問があり、何度か検索した結果、私にとって良いものは見つかりませんでした。だから私はあなたのDBが「メイン」であることを知って、PRAGMAに基づいて何かを提案します

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }

そして、配列を使用してリストを取得します

set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
0
Choca Croc