web-dev-qa-db-fra.com

Comment puis-je obtenir la liste des colonnes d'une table pour une base de données SQLite?

Je cherche à récupérer une liste de colonnes dans un tableau. La base de données est la dernière version de SQLite (3.6, je crois). Je cherche le code qui fait ceci avec une requête de SQL. Points bonus supplémentaires pour les métadonnées liées aux colonnes (par exemple, la longueur, le type de données, etc.)

80
AngryHacker

Ce que vous recherchez s'appelle le dictionnaire de données. Dans sqlite, une liste de toutes les tables peut être trouvée en interrogeant la table sqlite_master (ou la vue?)

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)

Pour obtenir des informations sur les colonnes, vous pouvez utiliser l'instruction 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

Pour plus d'informations sur les instructions pragma, consultez la documentation .

111
Bryan Kyle

Voici le moyen simple:

.schema <table>
47
ifightcrime

La question est ancienne mais les suivantes n'ont pas encore été mentionnées.

Dans de nombreux cas, un autre moyen pratique consiste à activer les en-têtes en:

sqlite> .headers on

Ensuite,

sqlite> SELECT ... FROM table

affiche un titre indiquant tous les champs sélectionnés (tous si vous avez sélectionné *) en haut de la sortie.

17
inVader

il suffit d'aller dans votre shell sqlite:

$ sqlite3 path/to/db.sqlite3

et puis juste frappé

sqlite> .schema

et vous aurez tout.

16
Majd Taby

Voici une instruction SELECT qui répertorie toutes les tables et colonnes de la base de données actuelle:

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
;
7
David Garoutte

En vous appuyant sur ce qui précède, vous pouvez tout faire en même temps: 

sqlite3 yourdb.db ".schema"

Cela vous donnera le code SQL pour créer la table, qui est en réalité une liste des colonnes. 

1
some ideas

Il s'agit d'une requête qui répertorie toutes les tables avec leurs colonnes et toutes les métadonnées que je pourrais obtenir à propos de chaque colonne lorsque OP est demandé (en points bonus).

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

Merci à @David Garoutte de m'avoir montré comment faire en sorte que pragma_table_info fonctionne dans une requête. 

Exécutez cette requête pour voir toutes les métadonnées de la table:

SELECT * sqlite_master WHERE type = 'table'
1
lewdev

Je sais, cela fait longtemps mais il n’est jamais trop tard… .__J'ai eu une question similaire avec TCL comme interprète et après plusieurs recherches, je n’ai rien trouvé de bon. Je propose donc quelque chose basé sur PRAGMA, sachant que votre base de données est «principale»

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

Et tableau utiliser pour obtenir une liste

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