474 votes

Existe-t-il un équivalent SQLite du DESCRIBE [table] de MySQL ?

Je commence tout juste à apprendre SQLite . Il serait bien de pouvoir voir les détails d'une table, comme la fonction de MySQL DESCRIBE [table] . PRAGMA table_info [table] n'est pas suffisant, car il ne fournit que des informations de base (par exemple, il ne montre pas si une colonne est un champ ou non). Est-ce que SQLite a un moyen de faire cela ?

587voto

Ned Batchelder Points 128913

El Utilitaire de ligne de commande SQLite a un .schema TABLENAME qui vous montre les instructions de création.

71 votes

Vous pouvez utiliser ".schema" sans table et il vous les montrera toutes.

53 votes

N'oubliez pas d'omettre le point-virgule à la fin de la déclaration.

11 votes

Le point-virgule n'est pas nécessaire

316voto

Strater Points 885
PRAGMA table_info([tablename]);

25 votes

Cela semble plus équivalent à la description de MySQL que .schema tablename à moi.

2 votes

Yep. Cela a fonctionné pour moi. .schema TABLENAME ne l'a pas fait. .schema seul, cependant, vous montre toutes les instructions de création, mais le résultat de PRAGMA est beaucoup plus utile si je veux juste regarder une table.

18 votes

Cela semble être la réponse acceptée puisqu'elle fonctionne par le biais de requêtes au lieu de dépendre d'une interface de ligne de commande. +1 pour moi.

125voto

Mark Rushakoff Points 97350

Cherchez-vous le SQL utilisé pour générer un tableau ? Pour cela, vous pouvez interroger le sqlite_master tableau :

sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_master;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_master WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)

0 votes

Y a-t-il une différence entre ceci et .schema foo ?

18 votes

@Matthew : .schema ne peut être utilisé qu'à partir d'une ligne de commande ; les commandes ci-dessus peuvent être exécutées en tant que requête via une bibliothèque (Python, C#, etc.).

0 votes

@MarkRushakoff Mais le résultat est le même ?

57voto

Ross Snyder Points 1261

Pour voir tous les tableaux :

.tables

Pour voir un tableau particulier :

.schema [tablename]

0 votes

Donner le nom de la table entre [crochet] ne fonctionne pas. Vous devez indiquer .schema TABLENAME

1 votes

@PayelSenapati Les parenthèses indiquent simplement que tablename est un paramètre facultatif.

8voto

Radagast Points 3

Pour éviter que les gens ne soient induits en erreur par certains des commentaires des autres réponses :

  1. Si .schema o query from sqlite_master ne donne aucune sortie, il indique une inexistante tablename par exemple, cela peut également être dû à une ; point-virgule à la fin pour .schema , .tables , ... Ou simplement parce que la table n'existe pas vraiment. C'est .schema ne fonctionne pas est très peu probable et alors un rapport de bogue devrait être déposé au projet sqlite.

... .schema ne peut être utilisé qu'à partir d'une ligne de commande ; les commandes ci-dessus > peuvent être exécutées en tant que requête via une bibliothèque (Python, C#, etc.). - Mark Rushakoff 25 juillet '10 à 21:09

  1. L'expression "ne peut être utilisée qu'à partir d'une ligne de commande" peut induire les gens en erreur. Presque tous les langages de programmation (probablement tous ?) peuvent appeler d'autres programmes/commandes. Par conséquent, le commentaire cité est malchanceux car l'appel d'un autre programme, dans ce cas-ci sqlite est plus susceptible d'être soutenue que le fait que la langue fournisse une wrapper / library pour chaque programme (ce qui non seulement est sujet à l'incomplétude par la nature même des masses de programmes existants, mais va également à l'encontre de l'action de single-source principle compliquant maintenance (ce qui accentue le chaos des données dans le monde).

1 votes

Toute personne qui écrit un programme pour récupérer des données d'une base de données SQL doit utiliser les pilotes SQL appropriés disponibles dans son langage de programmation pour accéder à la base de données et y effectuer des requêtes. C'est la manière appropriée d'accéder à une base de données. Je ne recommanderais jamais de pirater un programme en ligne de commande conçu pour effectuer des requêtes ad hoc. Votre suggestion est profondément erronée. Un programme de ligne de commande pour des requêtes ad hoc n'est certainement pas le point d'accès le plus approprié pour que le code du programme exécute des requêtes sur une base de données. L'utilisation de pilotes SQL n'est certainement pas une "complication de la maintenance" - c'est la meilleure pratique.

0 votes

Je suis d'accord pour dire que ce n'est pas mal, c'est similaire aux bibliothèques. C'est pourquoi les distros Linux|BSD proposent des gestionnaires de paquets. Et pourquoi il y a 0install cross platform PM. Mon propos était juste de préciser que tous les programmes n'ont pas besoin de wrappers. Cela n'a pas de sens à chaque fois. Dans ce cas (gestion de la base de données), ce n'est évidemment pas une mauvaise idée d'utiliser un wrapper.

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