web-dev-qa-db-fra.com

Comment formater correctement la sortie du shell sqlite?

Si je vais à mysql Shell et tapez SELECT * FROM users Je reçois -

+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
| USERID | NAME           | EMAILID                         | PASSWORD | USER_TYPE | CONTACT_ID_FKUSERS | COMPANY_ID_FKUSERS |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
|    137 | X              | [email protected]                        | #        | ADMIN     |                166 |                110 |
|    138 | Kshitiz        | [email protected]                 | asdf     | ADMIN     |                167 |                111 |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+

Oracle sqlplus montre -

USERID     NAME  EMAILID    PASSWORD   USER_TYPE  CONTACT_ID_FKUSERS COMPANY_ID_FKUSERS
---------- ----- ---------- ---------- ---------- ------------------ ------------------
137        X     [email protected]   #          ADMIN                     166                110
137        X     [email protected]   #          ADMIN                     166                110

Sqlite Shell montre -

137|X|[email protected]|#|ADMIN|166|110
138|Kshitiz|[email protected]|asdf|ADMIN|167|111
  1. Existe-t-il un moyen d'embellir la sortie de sqlite Shell?
  2. Existe-t-il un Shell alternatif meilleur que la distribution par défaut? (Clients CLI uniquement)
86
Kshitiz Sharma

Pour une sortie "lisible par l'homme", vous pouvez utiliser le mode column et activer la sortie d'en-tête. Cela vous donnera quelque chose de similaire à la sortie sqlplus dans vos exemples:

sqlite> select * from foo;
234|kshitiz|dba.se
sqlite> .mode column
sqlite> select * from foo;
234         kshitiz     dba.se
sqlite> .headers on
sqlite> select * from foo;
bar         baz         baf
----------  ----------  ----------
234         kshitiz     dba.se
126
Mat

Toutes les réponses fournissent des paramètres que vous pouvez taper sur la console SQLite ou via CLI, mais personne ne mentionne que ces paramètres peuvent être placés dans un fichier RC pour éviter d'avoir à les taper tout le temps. Enregistrez-le sous ~/.sqliterc:

.mode column
.headers on
.separator ROW "\n"
.nullvalue NULL

Remarque J'ai également ajouté un espace réservé pour les valeurs nulles, au lieu de la chaîne vide par défaut.

14
miken32

Pour ceux qui souhaitent obtenir les mêmes résultats, à l'exception de l'exécution de sqlite à partir de la ligne de commande. J'ai trouvé que ce qui suit ne fonctionne pas:

$ sqlite3 <dbfile> ".headers on;.mode column;select * from MyTable"
Error: mode should be one of: ascii column csv html insert line list tabs tcl

À la place, vous devez utiliser les options -column et -header avec la commande sqlite comme suit:

$ sqlite3 -column -header <dbfile> "select * from MyTable"

En utilisant:

$ sqlite3 --version 3.8.11.1 2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f
13
jersey bean

J'utilise toujours

.mode line

qui affiche les résultats de la requête verticalement, semblable au modificateur \G de MySQL.

5
Geoff_Clapp

Le mien ressemblait à un gâchis sans rupture de ligne. Commentaire de @Boxuan sur

Vous pouvez également ajouter la ligne .separator "\ n", afin que les lignes soient séparées par des sauts de ligne. La mienne ne l'était pas et la sortie était illisible. - Boxuan 11 mai à 15h08

Correction de mon problème avec lui aussi enter image description here

1
superheron

Vous pouvez utiliser .mode tabs pour plus de commodité.

sqlite> select * from user;
name    age
Bob     18
ALi     19
1
Kevin

Comme je ne peux pas encore commenter ... En plus des bonnes réponses déjà fournies par Mat et mlissner, si en tout cas le contenu d'une colonne est tronqué, après avoir donné le bon format au sqlite Shell (en utilisant .mode column et .headers on comme indiqué ci-dessus), il est également possible d'utiliser .explain pour afficher l'intégralité du contenu d'une colonne.

Le seul inconvénient de cette commande est que les en-têtes des colonnes rétrécissent, donc ne les lisent pas correctement et la sortie peut être assez désordonnée (dans un scénario visuel), alors vous pouvez utiliser .explain off pour revenir au format précédent et l'afficher à nouveau avec un format plus "lisible par l'homme".

Cette approche peut être utilisée conjointement avec les commandes de formateurs de sortie et comme solution temporaire pour afficher les données complètes d'une base de données/colonne, comme avec l'utilisation de .width vous devez toujours donner le nombre précis de caractères afin d'obtenir la sortie complète des données d'une colonne.

Pour plus d'informations sur la modification des formats de sortie, une référence rapide à la documentation CLI par défaut:

https://www.sqlite.org/cli.html

1
Cho-Lung