150 votes

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 un code qui fasse cela avec une requête SQL. Des points supplémentaires pour les métadonnées relatives aux colonnes (par exemple, la longueur, le type de données, etc.).

15voto

lewdev Points 101

Il s'agit d'une requête qui répertorie toutes les tables avec leurs colonnes, ainsi que toutes les métadonnées que j'ai pu obtenir sur chaque colonne, comme l'a demandé OP (comme 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 pour m'avoir montré comment obtenir pragma_table_info pour travailler dans une requête.

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

SELECT * FROM sqlite_master WHERE type = 'table'

3voto

some ideas Points 24

Dans le prolongement de ce qui précède, vous pouvez tout faire en même temps :

sqlite3 yourdb.db ".schema"

Cela vous donnera le SQL pour créer la table, qui est effectivement une liste de colonnes.

1voto

Choca Croc Points 1

Je sais, ça fait longtemps mais il n'est jamais trop tard J'ai eu une question similaire avec TCL comme interpréteur et après plusieurs recherches, je n'ai rien trouvé de bon pour moi. Je propose donc quelque chose basé sur PRAGMA, sachant que votre BD est "main".

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

Et utilisation d'un tableau 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X