¿Cómo se enumeran las tablas en un archivo de base de datos SQLite que se abrió con ATTACH?

¿Qué SQL se puede usar para enumerar las tablas y las filas dentro de esas tablas en un archivo de base de datos SQLite, una vez que lo he adjuntado con el comando ATTACH en la herramienta de línea de comandos SQLite 3?

Las .tables y “helper” de .schema no buscan en las bases de datos ATTACHed: solo consultan la tabla SQLITE_MASTER para la base de datos “principal”. En consecuencia, si utilizó

 ATTACH some_file.db AS my_db; 

entonces tienes que hacer

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

Tenga en cuenta que las tablas temporales tampoco se muestran con .tables : tiene que listar sqlite_temp_master para eso:

 SELECT name FROM sqlite_temp_master WHERE type='table'; 

Hay algunos pasos para ver las tablas en una base de datos SQLite:

  1. Enumere las tablas en su base de datos:

     .tables 
  2. Enumera cómo se ve la tabla:

     .schema tablename 
  3. Imprime toda la tabla:

     SELECT * FROM tablename; 
  4. Enumere todos los comandos de solicitud de SQLite disponibles:

     .help 

Parece que necesitas pasar por la tabla sqlite_master , así:

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

Y luego examine manualmente cada tabla con un SELECT o similar para mirar las filas.

Los comandos .DUMP y .SCHEMA no parecen ver la base de datos en absoluto.

Para mostrar todas las tablas, use

 SELECT name FROM sqlite_master WHERE type = "table" 

Para mostrar todas las filas, supongo que puede recorrer todas las tablas y simplemente hacer un SELECCIONAR * en cada una. Pero tal vez un DUMP es lo que buscas?

Use .help para verificar si hay comandos disponibles.

 .table 

Este comando mostraría todas las tablas debajo de su base de datos actual.

Hay un comando disponible para esto en la línea de comandos de SQLite:

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

Que se convierte al siguiente SQL:

 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 

Para enumerar las tablas, también puede hacer:

 SELECT name FROM sqlite_master WHERE type='table'; 

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

De acuerdo con la documentación , el equivalente a MySQLs ‘ SHOW TABLES; es:

El comando “.tables” es similar al modo de lista de configuración y luego ejecuta la siguiente consulta:

 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; 

Sin embargo, si está comprobando si existe una sola tabla (o para obtener sus detalles), consulte la respuesta de @LuizGeron .

A partir de las últimas versiones de SQLite 3 puede emitir:

 .fullschema 

para ver todas tus declaraciones de creación

Yo uso esta consulta para obtenerlo:

 SELECT name FROM sqlite_master WHERE type='table' 

Y para usar en iOS:

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

La forma más sencilla de hacerlo es abrir la base de datos directamente y usar el comando .dump , en lugar de adjuntarla después de invocar la herramienta de shell SQLite 3.

Entonces … (suponga que su prompt de línea de comando del sistema operativo es $) en lugar de $sqlite3 :

 sqlite3> ATTACH database.sqlite as "attached" 

Desde su línea de comando del sistema operativo, abra la base de datos directamente:

 $sqlite3 database.sqlite sqlite3> .dump 

Utilizar:

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

Mediante un union all , combine todas las tablas en una sola lista.

 select name from sqlite_master where type='table' union all select name from sqlite_temp_master where type='table' 

Como nadie ha mencionado la referencia oficial de SQLite, creo que puede ser útil referirse a ella bajo este título:

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

Puede manipular su base de datos utilizando los comandos descritos en este enlace. Además, si está utilizando el sistema operativo Windows y no sabe dónde está el shell del comando, eso está en el sitio del SQLite:

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

Después de descargarlo, haga clic en el archivo sqlite3.exe para inicializar el shell del comando SQLite . Cuando se inicializa, de forma predeterminada, esta sesión de SQLite utiliza una base de datos en memoria, no un archivo en el disco, por lo que todos los cambios se perderán cuando la sesión finalice. Para usar un archivo de disco persistente como base de datos, ingrese el comando “.open ex1.db” inmediatamente después de que se inicie la ventana del terminal.

El ejemplo anterior hace que el archivo de base de datos llamado “ex1.db” sea abierto y utilizado, y creado si no existe previamente. Es posible que desee utilizar un nombre de ruta completo para asegurarse de que el archivo se encuentre en el directorio en el que cree que está. Use barras diagonales inversas como el carácter separador del directorio. En otras palabras, use “c: /work/ex1.db”, no “c: \ work \ ex1.db”.

Para ver todas las tablas en la base de datos que ha elegido previamente, escriba el comando .tables como se dice en el enlace anterior.

Si trabaja en Windows, creo que podría ser útil mover este archivo sqlite.exe a la misma carpeta con los otros archivos de Python. De esta forma, el archivo Python escribe y las lecturas del shell SQLite desde archivos .db están en la misma ruta.

El comando “.schema” listará las tablas disponibles y sus filas, mostrándole la statement utilizada para crear dichas tablas:

 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 para ver todas las bases de datos, una llamada ‘ main

las tablas de esta base de datos se pueden ver por

SELECCIONAR el tbl_name distinto del orden sqlite_master por 1;

Las bases de datos adjuntas necesitan los prefijos que elija con AS en la statement ADJUNTAR, por ejemplo, aa (, bb, cc …), de modo que:

SELECCIONAR distinct tbl_name del orden aa.sqlite_master por 1;

Tenga en cuenta que aquí también obtiene los puntos de vista. Para excluir estos agregue donde escriba = ‘tabla’ antes de ‘ordenar’