¿Cómo enumerar las tablas en un archivo de base de datos SQLite que se abrió con ATTACH?
1197
¿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 ATTACHcomando en la herramienta de línea de comandos SQLite 3 ?
La siguiente es una GUI útil para sqlite si está interesado: sqlitestudio.pl Le da acceso para ver los detalles de las bases de datos, tablas, muy rápidamente y también tiene un buen editor de consultas ...
James Oravec
17
.tablespara tablas y .schema ?TABLE?para el esquema de la tabla específica.
H6.
.table 'bank_%'o .table '%_empl'también una sintaxis válida para consultar prefijos / sufijos!
gavenkoa
Respuestas:
576
Las funciones .tables, y .schema"ayudante" no se ven en las bases de datos ADJUNTAS: solo consultan la SQLITE_MASTERtabla para 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 .tables: tiene que hacer una lista sqlite_temp_masterpara eso:
SELECT name FROM sqlite_temp_master WHERE type='table';
Solo "SELECT name FROM sqlite_master WHERE type='table'"funciona para mí
vladkras
3
SELECCIONE el nombre de my_db.sqlite_master DONDE type = 'table'; esto no funciona para mí (para la base de datos adjunta) y arroja un error como: no existe tal tabla "my_db.sqlite_master"
Kanika
¿Qué querías decir con tablas temporales? ¿Hay alguno cuando acabo de abrir el archivo SQLite db?
Ewoks
Las tablas temporales son aquellas creadas con CREATE TEMPORARY TABLEcomandos SQL. Sus contenidos se descartan cuando se cierra la conexión de la base de datos actual y nunca se guardan en un archivo de base de datos.
Anthony Williams
1
Bajo el modo de comando sqlite3 y ejecutar ¡ ATTACH "some_file.db" AS my_db; Funcionó!
John_J
1272
Hay algunos pasos para ver las tablas en una base de datos SQLite:
Liste las tablas en su base de datos:
.tables
Enumere cómo se ve la tabla:
.schema tablename
Imprime toda la tabla:
SELECT*FROM tablename;
Enumere todos los comandos de solicitud de SQLite disponibles:
.tabley .tablesambos están permitidos. Para el caso, .tatambién funcionaría, ya que sqlite3 aceptará cualquier comando que no sea ambiguo. El nombre del comando según la ayuda es ".tables" (si alguien sigue prestando atención).
dbn
29
(Esta debería ser la respuesta aceptada, es la forma más sencilla de hacer las cosas).
dbn
66
.tablesno mostrará tablas si hay una base de datos abierta ATTACH '<path>' AS <name>;pero la respuesta de lasse sí lo hará. dado que el OP mencionó ATTACHing, creo que tenía razón al no aceptar esta respuesta. editar: acabo de notar que Anthony y otros a continuación también señalaron esto.
antiplex
2
@dbw: No necesariamente. Considere que está haciendo un contenedor de base de datos capaz de usar SQLite o MySql (mi caso). El uso de más comandos conformes con SQL facilitaría la conexión del paquete en otros idiomas que si usara comandos específicos del proveedor de DB.
Valentin Heinitz
"... sqlite3 aceptará cualquier comando que no sea ambiguo ..." Desafortunadamente, a veces también acepta comandos ambiguos. Por ejemplo, ".s" se interpreta como ".show", aunque ".schema", '.separator "o" .stats "también serían posibilidades. Y cuando no acepta un comando ambiguo, no enumera las posibilidades.
442
Parece que necesita pasar por la tabla sqlite_master , así:
SELECT*FROM dbname.sqlite_master WHERE type='table';
Y luego SELECTrevise manualmente cada tabla con una o similar para mirar las filas.
Los comandos .DUMPy .SCHEMAno parecen ver la base de datos en absoluto.
No es algo fácil de leer o recordar para usar en el futuro; el .tablescomando incorporado es más intuitivo
24
@Gryllida: a pesar de esto, se puede usar desde cualquier SQL-API, ya que es valide SQL. Los comandos integrados pueden no ser compatibles en todas partes.
Valentin Heinitz
2
@DoktorJ ¿Se .tableshan modificado para mostrar tablas de una base de datos adjunta?
Lasse V. Karlsen
44
En esa base de datos , sí, pero esta pregunta fue sobre mostrar las tablas en una base de datos que ha adjuntado. ¿Se .tablesha modificado el comando para mostrarlos también?
Lasse V. Karlsen
44
Doh! La comprensión lectora falla ... De alguna manera logré no captar la referencia ATTACH ... dos veces> _ <
Doktor J
162
Para mostrar todas las tablas, use
SELECT name FROM sqlite_master WHERE type ="table"
Para mostrar todas las filas, supongo que puede recorrer en iteración todas las tablas y simplemente hacer un SELECCIONAR * en cada una. Pero tal vez un DUMP es lo que buscas?
Extraño, debe ser correcto, pero no funciona cuando lo uso
Jürgen K.
42
Hay un comando disponible para esto en la línea de comando SQLite:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Que se convierte al siguiente SQL:
SELECT name FROM sqlite_masterWHERE type IN('table','view')AND name NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_masterWHERE type IN('table','view')ORDERBY1
Entonces ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")o no? Eso no funciona para mí, pero no estoy seguro de dónde se debe ejecutar este código.
Según la documentación , el equivalente 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 NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_master
WHERE type IN('table','view')ORDERBY1;
Sin embargo, si está verificando si existe una sola tabla (o para obtener sus detalles), vea la respuesta @LuizGeron .
SQLite versión 3.7.13 2012-07-17 17:46:21 Ingrese ".help" para obtener instrucciones Ingrese las instrucciones SQL terminadas con un ";" sqlite> .fullschema Error: comando desconocido o argumentos no válidos: "fullschema". Ingrese ".help" para obtener ayuda
Mona Jalal
2
Estás utilizando una versión de 2012
pimienta
12
La forma más fácil de hacer esto es abrir la base de datos directamente y usar el .dumpcomando, en lugar de adjuntarla después de invocar la herramienta de shell SQLite 3.
Entonces ... (suponga que la línea de comandos del 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:
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 de comandos, eso está en el sitio del SQLite:
Después de descargarlo, haga clic en el archivo sqlite3.exe para inicializar el shell de comandos SQLite . Cuando se inicializa, de manera 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 la 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" se abra y se use, y se cree si no existe anteriormente. Es posible que desee utilizar una ruta completa para asegurarse de que el archivo está en el directorio en el que cree que está. Utilice barras diagonales como carácter separador de 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 manera, el archivo Python escribe y las lecturas de shell SQLite de los archivos .db están en la misma ruta.
.tables
para tablas y.schema ?TABLE?
para el esquema de la tabla específica..table 'bank_%'
o.table '%_empl'
también una sintaxis válida para consultar prefijos / sufijos!Respuestas:
Las funciones
.tables
, y.schema
"ayudante" no se ven en las bases de datos ADJUNTAS: solo consultan laSQLITE_MASTER
tabla para la base de datos "principal". En consecuencia, si usasteentonces tienes que hacer
Tenga en cuenta que las tablas temporales tampoco se muestran
.tables
: tiene que hacer una listasqlite_temp_master
para eso:fuente
"SELECT name FROM sqlite_master WHERE type='table'"
funciona para míCREATE TEMPORARY TABLE
comandos SQL. Sus contenidos se descartan cuando se cierra la conexión de la base de datos actual y nunca se guardan en un archivo de base de datos.ATTACH "some_file.db" AS my_db;
Funcionó!Hay algunos pasos para ver las tablas en una base de datos SQLite:
Liste las tablas en su base de datos:
Enumere cómo se ve la tabla:
Imprime toda la tabla:
Enumere todos los comandos de solicitud de SQLite disponibles:
fuente
.table
y.tables
ambos están permitidos. Para el caso,.ta
también funcionaría, ya que sqlite3 aceptará cualquier comando que no sea ambiguo. El nombre del comando según la ayuda es ".tables" (si alguien sigue prestando atención)..tables
no mostrará tablas si hay una base de datos abiertaATTACH '<path>' AS <name>;
pero la respuesta de lasse sí lo hará. dado que el OP mencionó ATTACHing, creo que tenía razón al no aceptar esta respuesta. editar: acabo de notar que Anthony y otros a continuación también señalaron esto.Parece que necesita pasar por la tabla sqlite_master , así:
Y luego
SELECT
revise manualmente cada tabla con una o similar para mirar las filas.Los comandos
.DUMP
y.SCHEMA
no parecen ver la base de datos en absoluto.fuente
.tables
comando incorporado es más intuitivo.tables
han modificado para mostrar tablas de una base de datos adjunta?.tables
ha modificado el comando para mostrarlos también?Para mostrar todas las tablas, use
Para mostrar todas las filas, supongo que puede recorrer en iteración todas las tablas y simplemente hacer un SELECCIONAR * en cada una. Pero tal vez un DUMP es lo que buscas?
fuente
Use
.help
para verificar los comandos disponibles.Este comando mostrará todas las tablas en su base de datos actual.
fuente
Hay un comando disponible para esto en la línea de comando SQLite:
Que se convierte al siguiente SQL:
fuente
Para enumerar las tablas también puede hacer:
fuente
cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")
o no? Eso no funciona para mí, pero no estoy seguro de dónde se debe ejecutar este código.Pruebe
PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
fuente
Yo uso esta consulta para obtenerlo:
Y para usar en iOS:
fuente
Según la documentación , el equivalente de MySQL
SHOW TABLES;
es:Sin embargo, si está verificando si existe una sola tabla (o para obtener sus detalles), vea la respuesta @LuizGeron .
fuente
A partir de las últimas versiones de SQLite 3, puede emitir:
para ver todas tus declaraciones de creación.
fuente
La forma más fácil de hacer esto es abrir la base de datos directamente y usar el
.dump
comando, en lugar de adjuntarla después de invocar la herramienta de shell SQLite 3.Entonces ... (suponga que la línea de comandos del sistema operativo es $) en lugar de
$sqlite3
:Desde la línea de comandos de su sistema operativo, abra la base de datos directamente:
fuente
Vía a
union all
, combine todas las tablas en una lista.fuente
Utilizar:
fuente
Como 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 shell de comandos, 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 de comandos SQLite . Cuando se inicializa, de manera 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 la 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" se abra y se use, y se cree si no existe anteriormente. Es posible que desee utilizar una ruta completa para asegurarse de que el archivo está en el directorio en el que cree que está. Utilice barras diagonales como carácter separador de 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 manera, el archivo Python escribe y las lecturas de shell SQLite de los archivos .db están en la misma ruta.
fuente
El comando ".schema" enumerará las tablas disponibles y sus filas, mostrándole la instrucción utilizada para crear dichas tablas:
fuente
.da para ver todas las bases de datos, una llamada ' main '
las tablas de esta base de datos pueden ser vistas por
SELECCIONE el nombre tbl_nombre distinto del orden sqlite_master por 1;
Las bases de datos adjuntas necesitan prefijos que elija con AS en la declaración ATTACH, por ejemplo, aa (, bb, cc ...) así que:
SELECCIONE tbl_name distinto del orden aa.sqlite_master por 1;
Tenga en cuenta que aquí también obtiene las vistas. Para excluir estos, agregue where type = 'table' antes de 'order'
fuente