Wie kann ich die Liste eines Spalts in einer Tabelle für eine SQLite-Datenbank erhalten?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin auf der Suche eine Liste von Spalten in einer Tabelle abzurufen. Die Datenbank ist die neueste Version von SQLite (3.6, glaube ich). Ich suche Code, der dies mit einer SQL-Abfrage der Fall ist. Extra-Bonuspunkte für Metadaten zu den Spalten im Zusammenhang (z Länge, Datentyp, etc ...)

War es hilfreich?

Lösung

Was Sie suchen die Daten Wörterbuch genannt. In SQLite eine Liste aller Tabellen können durch Abfragen sqlite_master Tabelle (oder sehen?)

finden
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)

Um die Spalteninformationen erhalten können Sie die pragma table_info(table_name) Anweisung verwenden:

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

Für weitere Informationen über die Pragma-Anweisungen finden Sie in der Dokumentation .

Andere Tipps

Hier ist die einfache Art und Weise:

.schema <table>

Die Frage ist alt, aber die folgende wurde noch nicht genannt.

Eine weitere bequeme Möglichkeit, in vielen Fällen ist Header zu aktivieren durch:

sqlite> .headers on

Dann

sqlite> SELECT ... FROM table

wird eine Überschrift angezeigt werden alle ausgewählten Felder zeigt (alle, wenn Sie SELECT *) an der Spitze des Ausgangs.

gehen Sie einfach in Ihre SQLite-Shell:

$ sqlite3 path/to/db.sqlite3

und dann drücken Sie einfach

sqlite> .schema

und Sie werden alles bekommen.

Hier ist eine SELECT-Anweisung, die alle Tabellen und Spalten in der aktuellen Datenbank aufgeführt:

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
;

Dies ist eine Abfrage, die alle Tabellen mit ihren Spalten und all Meta-Daten listet ich über jede Spalte bekommen könnte als OP (als Bonuspunkte) angefordert werden.

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

Danke Garoutte zu @ David mich zu zeigen, wie pragma_table_info erhalten in einer Abfrage zu arbeiten.

Führen Sie diese Abfrage alle Metadaten der Tabelle zu sehen:

SELECT * sqlite_master WHERE type = 'table'

Basierend auf den oben genannten, können Sie alles auf einmal tun:

sqlite3 yourdb.db ".schema"

Das gibt Ihnen die SQL die Tabelle zu erstellen, die effektiv eine Liste der Spalten ist.

Ich weiß, es ist schon eine lange Zeit, aber es ist nie zu spät ... Ich hatte eine ähnliche Frage mit TCL als Dolmetscher und nach mehreren Such, fand nichts Gutes für mich. Also schlage ich vor, etwas basierend auf PRAGMA, wohl wissend, dass Ihre DB ist „main“

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

Und Array Verwendung zu erhalten, eine Liste

set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top