web-dev-qa-db-fra.com

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

Quel code SQL peut être utilisé pour répertorier 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 de l'outil de ligne de commande SQLite 3?

1133
izb

Les fonctions .tables et .schema "helper" ne consultent pas les bases de données ATTACHed: 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;

alors vous devez faire

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

Notez que les tables temporaires ne s'affichent pas avec .tables ni: vous devez lister sqlite_temp_master pour cela:

SELECT name FROM sqlite_temp_master WHERE type='table';
540
Anthony Williams

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

  1. Listez les tables dans votre base de données:

    .tables
    
  2. Énumérez à quoi ressemble le tableau:

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

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

    .help
    
1245
Mark Janssen

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

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

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

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

435

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?

157
Christian Davén

Utilisez .help pour vérifier les commandes disponibles.

.table

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

68
Antony.H

Une commande est disponible pour cela sur la ligne de commande SQLite:

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

Ce qui convertit le 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
42
flubba

Pour lister les tables, vous pouvez aussi faire:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

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

30
Luiz Geron

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

SELECT name FROM sqlite_master WHERE type='table'

Et pour utiliser dans iOS:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
20
GameLoading

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

La commande ".tables" est similaire au paramétrage en mode liste et à l'exécution de 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), voir @ LuizGeron answer.

16
Alix Axel

À partir des dernières versions de SQLite 3, vous pouvez générer:

.fullschema

pour voir toutes vos déclarations de création.

15
pepper

La méthode la 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 SQLite 3 Shell.

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"

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

$sqlite3 database.sqlite
sqlite3> .dump
12
Noah

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'
9
openwonk

Utilisation:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
Mrityunjay Singh

Comme personne n’a mentionné la référence officielle de SQLite, je pense qu’il pourrait être utile de la mentionner 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 la commande Shell, c'est-à-dire sur le site de SQLite:

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

Après l'avoir téléchargé, cliquez sur le fichier sqlite3.exe pour initialiser la commande SQLite Shell . 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 la commande ".open ex1.db" immédiatement après le démarrage de la fenêtre du terminal.

L'exemple ci-dessus provoque l'ouverture et l'utilisation du fichier de base de données nommé "ex1.db" et sa création 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" et non "c:\work\ex1.db".

Pour voir toutes les tables de la base de données que vous avez précédemment choisies, tapez 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 SQLite Shell lit les fichiers .db se trouvent dans le même chemin.

7
oiyio

Le commando ".schema" listera les tables disponibles et leurs lignes, en vous montrant la déclaration 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); 
5
trf

.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

SELECT tbl_name distinct de sqlite_master order by 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:

SELECT nom_tbl distinct de aa.sqlite_master order by 1;

Notez que vous obtenez également les points de vue. Pour les exclure, ajoutez où type = 'table' avant 'commande'

1
Klaas-Z4us-V