55

SQLite データベースで列名とそのテーブルを取得する必要があります。必要なのは、2 つの列を持つ結果セットです: table_name | column_name.

MySQL では、データベースに対する SQL クエリを使用してこの情報を取得できますINFORMATION_SCHEMA。ただし、SQLite はテーブルを提供していますsqlite_master

sqlite> create table students (id INTEGER, name TEXT);
sqlite> select * from sqlite_master;
  table|students|students|2|CREATE TABLE students (id INTEGER, name TEXT)

CREATE TABLEこれは、私にとって役に立たないDDL 構築クエリ ( ) になり、関連情報を取得するにはこれを解析する必要があります。

テーブルのリストを取得してそれらを列に結合するか、テーブル名の列と一緒に列を取得する必要があります。PRAGMA table_info(TABLENAME)テーブル名がないので、うまくいきません。データベース内のすべての列メタデータを取得したいと考えています。

データベースにクエリを実行して結果セットとしてその情報を取得するより良い方法はありますか?

4

7 に答える 7

94

基本的に、質問でソリューションに名前を付けました。

テーブル (およびビュー) のリストを取得するには、次のように sqlite_master をクエリします。

SELECT name, sql FROM sqlite_master
WHERE type='table'
ORDER BY name;

( SQLite FAQを参照)

特定のテーブルの列に関する情報を取得するには、SQLite PRAGMA ドキュメントPRAGMA table_info(table-name);で説明されているように使用します。

単一のクエリの結果として返される tablename|columnname を取得する方法がわかりません。SQLite がこれをサポートしているとは思えません。おそらく、2 つのメソッドを一緒に使用して探している情報を返すのが最善の策です。最初に sqlite_master を使用してテーブルのリストを取得し、次にそれらをループして PRAGMA table_info() を使用して列を取得します。

于 2011-07-07T22:13:27.333 に答える
11

「.tables」および「.schema [table_name]」コマンドがあり、「select * from sqlite_master;」から取得した結果に一種の分離バージョンを提供します。

「pragma table_info([table_name]);」もあります 構築クエリの代わりに解析の結果を改善するコマンド:


sqlite> .tables
students
sqlite> .schema students
create table students(id INTEGER, name TEXT);
sqlite> pragma table_info(students);
0|id|INTEGER|0||0
1|name|TEXT|0||0

うまくいけば、それはある程度役立ちます...

于 2011-06-23T22:49:43.037 に答える
2

参考までに、.Net を使用している場合は、このDbConnection.GetSchemaメソッドを使用して、通常は INFORMATION_SCHEMA にある情報を取得できます。抽象化レイヤーがある場合、すべてのタイプのデータベースに対して同じコードを使用できます (MySQL は制限配列の最初の 2 つの引数を切り替えるように見えることに注意してください)。

于 2011-10-24T02:17:25.480 に答える