how - ¿Cómo listar las tablas en un archivo de base de datos SQLite que se abrió con ATTACH?
sqlite select* (17)
¿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 haya adjuntado con el comando ATTACH
en la herramienta de línea de comandos SQLite 3?
.da para ver todas las bases de datos - una llamada '' main ''
Las tablas de esta base de datos pueden ser vistas por
SELECCIONE el tbl_name distinto del orden sqlite_master por 1;
Las bases de datos adjuntas necesitan prefijos que eligió con AS en la declaración ATTACH, por ejemplo, aa (, bb, cc ...) para:
SELECCIONE el tbl_name distinto de un orden aa.sqlite_master por 1;
Tenga en cuenta que aquí se obtienen las vistas también. Para excluir estos, agregue donde tipo = ''tabla'' antes de ''orden''
A partir de las últimas versiones de SQLite 3 puede emitir:
.fullschema
para ver todas sus declaraciones de crear.
A través de una union all
, combine todas las tablas en una lista.
select name
from sqlite_master
where type=''table''
union all
select name
from sqlite_temp_master
where type=''table''
Dado que nadie ha mencionado la referencia oficial de SQLite, creo que puede ser útil referirse a ella bajo este encabezado:
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 comando shell, eso está en el sitio de SQLite:
https://www.sqlite.org/download.html
Después de descargarlo, haga clic en el archivo sqlite3.exe para inicializar el shell de comandos de 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 finalice la sesión. 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 denominado "ex1.db" se abra y se use, y se cree si no existe previamente. Es posible que desee utilizar una ruta de acceso completa para asegurarse de que el archivo se encuentra en el directorio en el que cree que está. Use barras diagonales como el carácter separador de directorios. 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 anteriormente, escriba el comando .tables como se dice en el enlace anterior.
Si trabajas 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 manera, el archivo Python se escribe en y el shell de SQLite lee desde archivos .db en la misma ruta.
De acuerdo con la documentation , el equivalente a SHOW TABLES;
de MySQL SHOW TABLES;
es:
El comando ".tables" es similar a configurar el modo de lista y luego ejecutar 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á verificando si existe una sola tabla (o para obtener sus detalles), vea la respuesta de @LuizGeron .
El comando ".schema" mostrará una lista de las tablas disponibles y sus filas, mostrándole la declaración 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);
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
Hay unos pocos pasos para ver las tablas en una base de datos SQLite:
Listar las tablas en su base de datos:
.tables
Haz una lista de cómo se ve la mesa:
.schema tablename
Imprime toda la tabla:
SELECT * FROM tablename;
Listar todos los comandos de solicitud de SQLite disponibles:
.help
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 la línea de comandos de su sistema operativo es $) en lugar de $sqlite3
:
sqlite3> ATTACH database.sqlite as "attached"
Desde la línea de comandos de su sistema operativo, abra la base de datos directamente:
$sqlite3 database.sqlite
sqlite3> .dump
Las .tables
"helper" de .schema
y .schema
no analizan las bases de datos ADJUNTADAS: solo consultan la tabla SQLITE_MASTER
para obtener la base de datos "principal". En consecuencia, si usaste
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'';
Para listar las tablas también puedes hacer:
SELECT name FROM sqlite_master
WHERE type=''table'';
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?
Parece que necesitas ir a través de la tabla sqlite_master , así:
SELECT * FROM dbname.sqlite_master WHERE type=''table'';
Y luego vaya manualmente a través de 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.
Pruebe PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
Use .help
para verificar los comandos disponibles.
.table
Este comando mostrará todas las tablas en su base de datos actual.
Utilizar:
import sqlite3
TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type=''table''"
Yo uso esta consulta para conseguirlo:
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''"];