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

186voto

Bryan Kyle Points 5931

Ce que vous cherchez s'appelle le dictionnaire de données. Dans sqlite, une liste de toutes les tables peut être trouvée en interrogeant la table (ou la vue) 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)

Pour obtenir des informations sur les colonnes, vous pouvez utiliser la fonction pragma table_info(table_name) déclaration :

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 déclarations pragma, voir le document documentation .

7 votes

Super ! Maintenant, comment faire en dehors de la ligne de commande ? Comment le faire à partir de mon propre programme en C ?

0 votes

Comment puis-je implémenter la même chose que ci-dessus en Objective-c ?

3 votes

@Nag, je pense que SQLite devrait simplement traiter ces commandes comme du SQL ordinaire, les traiter en conséquence, et vous renvoyer un ensemble de résultats.

81voto

ifightcrime Points 377

Voici le moyen le plus simple :

.schema <table>

4 votes

Cela devrait vraiment être la réponse.

28 votes

@EhteshChoudhury non, il ne devrait pas, la question demande une requête SQL et ce n'en est pas une.

37voto

inVader Points 783

La question est ancienne mais ce qui suit n'a pas encore été mentionné.

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

sqlite> .headers on

Ensuite,

sqlite> SELECT ... FROM table

affichera un titre montrant tous les champs sélectionnés (tous si vous sélectionnez *) en haut de la sortie.

0 votes

Si mon hypothèse est correcte et que le problème réel est que sqlite3 ne fournit pas l'en-tête d'une requête par défaut, alors c'est la solution que nous recherchions tous . Si votre tableau est trop long pour être affiché sur votre terminal, il suffit d'ajouter, par ex. LIMIT 5 . N'oubliez pas le ; à la fin.

32voto

David Garoutte Points 191

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
;

0 votes

Merci. Vous pouvez ordonner par schéma si vous modifiez votre fichier ORDER BY a tableName, p.cid .

17voto

Majd Taby Points 743

Va juste dans ton shell sqlite :

$ sqlite3 path/to/db.sqlite3

et ensuite, il suffit de cliquer sur

sqlite> .schema

et vous obtiendrez tout.

2 votes

La question porte sur une requête SQL.

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