¿Cómo se enumeran las tablas en un file de database SQLite que se abrió con ATTACH?

¿Qué SQL se puede usar para enumerar las tablas y las filas dentro de esas tablas en un file de database SQLite, una vez que lo he adjuntado con el command ATTACH en la herramienta de command-line SQLite 3?

Las .tables y "helper" de .schema no buscan en las bases de datos ATTACHed: solo consultan la tabla SQLITE_MASTER para la database "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 count que las tablas temporales tampoco se muestran con .tables : tiene que listr sqlite_temp_master para eso:

 SELECT name FROM sqlite_temp_master WHERE type='table'; 

Hay algunos pasos para ver las tablas en una database SQLite:

  1. Enumere las tablas en su database:

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

     .schema tablename 
  3. Imprime toda la tabla:

     SELECT * FROM tablename; 
  4. Enumere todos los commands de request 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 commands .DUMP y .SCHEMA no parecen ver la database 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 commands disponibles.

 .table 

Este command mostraría todas las tablas debajo de su database actual.

Para enumerar las tablas, también puede hacer:

 SELECT name FROM sqlite_master WHERE type='table'; 

Hay un command disponible para esto en la command-line 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 

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

De acuerdo con la documentation , el equivalente a MySQLs ' SHOW TABLES; es:

El command ".tables" es similar al modo de list de configuration 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 get 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

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

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

 sqlite3> ATTACH database.sqlite as "attached" 

Desde su línea de command del sistema operativo, abra la database directamente:

 $sqlite3 database.sqlite sqlite3> .dump 

Yo uso esta consulta para getlo:

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

Utilizar:

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

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

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

El command ".schema" listrá 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);

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

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

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

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

Después de downloadlo, click el file sqlite3.exe para inicializar el shell del command SQLite . Cuando se inicializa, de forma pnetworkingeterminada, esta session de SQLite utiliza una database en memory, no un file en el disco, por lo que todos los cambios se perderán cuando la session finalice. Para usar un file de disco persistente como database, ingrese el command ".open ex1.db" inmediatamente después de que se inicie la window del terminal.

El ejemplo anterior hace que el file de database 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 file se encuentre en el directory en el que cree que está. Use las barras diagonales inversas como el carácter separador de directorys. En otras palabras, use "c: /work/ex1.db", no "c: \ work \ ex1.db".

Para ver todas las tablas en la database que ha elegido previamente, escriba el command .tables como se dice en el enlace anterior.

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

.da para ver todas las bases de datos, una llamada ' main '

las tablas de esta database se pueden ver por

SELECCIONAR el tbl_name distinto del order 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 order aa.sqlite_master por 1;

Tenga en count que aquí también obtiene los puntos de vista. Para excluir estos agregue donde escriba = 'tabla' antes de 'orderar'