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

StackOverflow https://stackoverflow.com/questions/82875

  •  01-07-2019
  •  | 
  •  

Question

Quel code SQL peut être utilisé pour répertorier les tables et les lignes qu’elles contiennent 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?

Était-ce utile?

La solution

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

ATTACH some_file.db AS my_db;

alors vous devez faire

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

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

SELECT name FROM sqlite_temp_master WHERE type='table';

Autres conseils

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

  1. Répertoriez les tables de votre base de données:

    .tables
    
  2. Répertoriez le tableau:

    .schema tablename
    
  3. Imprimer le tableau entier:

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

    .help
    

Il semble que vous deviez consulter la table sqlite_master , comme suit:

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

Ensuite, parcourez manuellement chaque table avec un SELECT ou similaire pour consulter les lignes.

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

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 faire un SELECT * sur chacune d’elles. Mais peut-être que vous cherchez un DUMP?

Utilisez .help pour rechercher les commandes disponibles.

.table

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

Une commande est disponible à cet effet sur la ligne de commande SQLite:

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

Qui convertit le code 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

Pour lister les tables, vous pouvez aussi faire:

SELECT name FROM sqlite_master
WHERE type='table';

Essayez PRAGMA table_info (nom_table);
http://www.sqlite.org/pragma.html#schema

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'"];

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

  

Les "tables". La commande est similaire au réglage en 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;

Toutefois, si vous vérifiez s'il existe une seule table (ou pour obtenir ses détails), voir @LuizGeron answer. .

À partir des dernières versions de SQLite & 3, vous pouvez créer:

.fullschema

pour voir toutes vos instructions de création.

Pour ce faire, le moyen le plus simple consiste à ouvrir directement la base de données et à utiliser la commande .dump , plutôt que de la joindre après avoir appelé l'outil shell SQLite & 3.

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump

Utiliser:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"

Via une 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'

Étant donné que 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 le système d'exploitation Windows et ne savez pas où se trouve le shell de commande, c'est-à-dire sur le site de SQLite:

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

Après l'avoir téléchargée, cliquez sur le fichier sqlite3.exe pour initialiser le shell de commande SQLite . Lors de son initialisation, cette session SQLite utilise par défaut une base de données en mémoire, et non un fichier sur disque, de sorte que toutes les modifications seront perdues lors de la fermeture de la session. Pour utiliser un fichier de disque persistant comme base de données, entrez le fichier ".open 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". être ouvert et utilisé, et créé s'il n'existait pas auparavant. Vous voudrez peut-être utiliser un chemin d'accès complet pour vous assurer que le fichier se trouve dans le répertoire dans lequel vous pensez qu'il se trouve. Utilisez des barres obliques comme caractère de séparation de répertoire. En d'autres termes, utilisez "c: /work/ex1.db" ;, pas" c: \ work \ ex1.db ".

Pour afficher toutes les tables de la base de données que vous avez précédemment sélectionnées, entrez la commande .tables , comme indiqué dans le lien ci-dessus.

Si vous travaillez sous Windows, je pense qu’il pourrait être utile de déplacer ce fichier sqlite.exe dans le même dossier que les autres fichiers Python. De cette manière, le fichier Python écrit et le shell SQLite lit les fichiers .db dans le même chemin.

Le " .schema " Le commando listera les tables disponibles et leurs lignes, en vous montrant l’instruction utilisée pour créer ces 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);

.da pour voir toutes les bases de données - une appelée " main "

Les

tables de cette base de données peuvent être vues par

SÉLECTIONNER distinct tbl_name de l'ordre sqlite_master par 1;

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

CHOISISSEZ un nom_table distinct dans aa.sqlite_master , ordre par 1;

Notez qu'ici, vous obtenez également les points de vue. Pour exclure ces ajouter    où type = 'table' avant 'commande'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top