Comment lister les tables dans un fichier de base de données SQLite qui a été ouvert avec ATTACH?

Quel SQL peut être utilisé pour lister les tables et les lignes de ces tables dans un fichier de base de données SQLite-une fois que je l'ai attaché avec la commande ATTACH sur L'outil de ligne de commande SQLite 3?

1048
demandé sur izb 2008-09-17 16:59:53

17 réponses

Les fonctions .tables et .schema "helper "ne regardent pas dans les bases de données attachées: elles interrogent simplement la table SQLITE_MASTER pour la base de données" principale". Par conséquent, si vous avez utilisé

ATTACH some_file.db AS my_db;

Ensuite, vous devez faire

SELECT name FROM my_db.sqlite_master WHERE type='table';

Notez que les tables temporaires n'apparaissent pas non plus avec .tables: vous devez lister sqlite_temp_master pour cela:

SELECT name FROM sqlite_temp_master WHERE type='table';
476
répondu Anthony Williams 2008-09-17 13:30:00

Il y a quelques étapes pour voir les tables dans une base de données SQLite:

  1. Liste les tables de votre base de données:

    .tables
    
  2. Liste l'apparence de la table:

    .schema tablename
    
  3. Imprimer la table entière:

    SELECT * FROM tablename;
    
  4. Liste toutes les commandes d'invite SQLite disponibles:

    .help
    
1199
répondu Mark Janssen 2014-04-16 15:05:05

Il semble que vous devez passer par la table sqlite_master , comme ceci:

SELECT * FROM dbname.sqlite_master WHERE type='table';

Puis parcourez manuellement chaque table avec un SELECT ou similaire pour regarder les lignes.

Les commandes .DUMP et .SCHEMA ne semblent pas voir du tout la base de données.

424
répondu Lasse Vågsæther Karlsen 2014-06-12 08:52:42

Pour afficher toutes les tables, utilisez

SELECT name FROM sqlite_master WHERE type = "table"

Pour afficher toutes les lignes, je suppose que vous pouvez parcourir toutes les tables et simplement faire un SELECT * sur chacune. Mais peut-être qu'une décharge est ce que vous cherchez?

142
répondu Christian Davén 2008-09-17 13:06:03

Utilisez .help pour vérifier les commandes disponibles.

.table

Cette commande affichera toutes les tables sous votre base de données actuelle.

66
répondu Antony.H 2014-06-12 08:38:52

Il y a une commande disponible pour cela sur la ligne de commande SQLite:

.tables ?PATTERN?      List names of tables matching a LIKE pattern

Qui convertit en SQL suivant:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
37
répondu Peter Mortensen 2017-09-01 00:51:06

Pour lister les tables, vous pouvez également faire:

SELECT name FROM sqlite_master
WHERE type='table';
34
répondu Rafał Dowgird 2013-03-13 09:19:23

Essayer PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

26
répondu Luiz Geron 2013-03-13 09:16:31

Selon la documentation, l'équivalent de MySQLs' SHOW TABLES; est:

Le ".la commande" tables " est similaire à la définition du mode liste puis à l'exécution la requête suivante:

SELECT name FROM sqlite_master
  WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
  WHERE type IN ('table','view')
ORDER BY 1;

Cependant, si vous vérifiez si une seule table existe (ou pour obtenir ses détails), consultez la réponse @LuizGeron.

14
répondu Alix Axel 2017-05-23 12:02:49

À partir des dernières versions de SQLite 3, vous pouvez émettre:

.fullschema

Pour voir toutes vos instructions create.

13
répondu pepper 2015-11-18 19:03:36

J'utilise cette requête pour l'obtenir:

SELECT name FROM sqlite_master WHERE type='table'

Et à utiliser dans iOS:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
12
répondu GameLoading 2017-09-01 00:53:22

La façon la plus simple de le faire est d'Ouvrir La base de données directement et d'utiliser la commande .dump, plutôt que de l'attacher après avoir appelé L'outil SQLite 3 shell.

Donc... (supposons que votre invite de ligne de commande du système d'exploitation est$) au lieu de $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

Depuis la ligne de commande de votre système d'exploitation, ouvrez directement la base de données:

$sqlite3 database.sqlite
sqlite3> .dump
10
répondu Noah 2015-11-18 19:02:15

Utilisation:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
8
répondu Mrityunjay Singh 2015-11-18 19:06:52

Via un union all, combinez toutes les tables en une seule liste.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
8
répondu openwonk 2016-10-13 21:48:00

Puisque personne n'a mentionné la référence officielle de SQLite, je pense qu'il peut être utile de s'y référer sous cette rubrique:

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

Vous pouvez manipuler votre base de données en utilisant les commandes décrites dans ce lien. En outre, Si vous utilisez Windows OS et ne savez pas où se trouve le shell de commande, c'est-à-dire dans le site de SQLite:

Https://www.sqlite.org/download.html

Après l'avoir téléchargé, cliquez sur sqlite3.fichier exe pour initialiser le shell de commande SQLite . Lorsqu'il est initialisé, par défaut, cette session SQLite utilise une base de données en mémoire, pas un fichier sur le disque, et donc toutes les modifications seront perdues lorsque la session se termine. Pour utiliser un fichier disque persistant comme base de données, entrez le ".ouvrez ex1.db " commande immédiatement après le démarrage de la fenêtre du terminal.

L'exemple ci-dessus provoque le fichier de base de données nommé "ex1.db " à ouvrir et à utiliser, et à créer s'il n'existe pas auparavant. Vous souhaitez utiliser un nom de chemin complet pour s'assurer que le fichier est dans le répertoire que vous pensez qu'il est. Utilisez des barres obliques en tant que caractère séparateur de répertoire. En d'autres termes utilisez "c:/work/ex1.db", pas "c:\work\ex1.DB".

Pour voir toutes les tables de la base de données que vous avez précédemment choisie, tapez la commande .tableaux comme il est dit dans le lien ci-dessus.

Si vous travaillez sous Windows, je pense qu'il pourrait être utile de déplacer ce sqlite.fichier exe dans le même dossier que les autres fichiers Python. Dans de cette façon, le fichier Python écrit et le shell SQLite lit.les fichiers db sont dans le même chemin.

6
répondu oiyio 2016-01-23 23:54:23

Le ".schema " commando listera les tables disponibles et leurs lignes, en vous montrant l'instruction utilisée pour créer lesdites tables:

sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);
5
répondu 2008-09-17 13:05:20

.da pour voir toutes les bases de données appelée 'main'

Les Tables de cette base de données peuvent être vues par

Sélectionnez un nom_tbl distinct dans l'ordre sqlite_master par 1;

Les bases de données attachées ont besoin des préfixes que vous avez choisis avec comme dans L'instruction ATTACH par exemple aa (, bb, cc...) donc:

Sélectionnez un nom_tbl distinct dans aa.sqlite_master commande par 1;

Notez qu'ici vous obtenez également les vues. Pour les exclure ajoutez où type = 'table' avant "ordre"

1
répondu Klaas-Z4us-V 2017-11-12 10:25:09