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

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

preguntado el 17 de septiembre de 08 a las 10:09

prueba este tienes información completa de las tablas http://www.sqlite.org/pragma.html#schema -

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 ... -

.tables para mesas y .schema ?TABLE? para el esquema de la tabla específica. -

.table 'bank_%' or .table '%_empl' ¡también sintaxis válida para consultar prefijos / sufijos! -

17 Respuestas

La .tables y .schema Las funciones "auxiliares" no miran las bases de datos ADJUNTAS: solo consultan el SQLITE_MASTER tabla para la base de datos "principal". En consecuencia, si usó

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 no aparecen con .tables ya sea: tienes que listar sqlite_temp_master para eso:

SELECT name FROM sqlite_temp_master WHERE type='table';

Respondido el 17 de Septiembre de 08 a las 14:09

Solo "SELECT name FROM sqlite_master WHERE type='table'" funciona para mi - Vladkras

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é quisiste decir con tablas temporales? ¿Hay alguno cuando acabo de abrir el archivo SQLite db? - Ewoks

Las tablas temporales son aquellas creadas con CREATE TEMPORARY TABLE Comandos SQL. Su contenido se elimina cuando se cierra la conexión actual a la base de datos y nunca se guarda en un archivo de base de datos. - Anthony Williams

En el modo de comando sqlite3 y ejecutar ATTACH "some_file.db" AS my_db; ¡Funcionó! - Juan_J

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

  1. Enumere las tablas en su base de datos:

    .tables
    
  2. Enumere cómo se ve la mesa:

    .schema tablename
    
  3. Imprime la tabla completa:

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

    .help
    

Respondido 16 Abr '14, 16:04

.table y .tables ambos están permitidos. Para esa materia, .ta también funcionaría, ya que sqlite3 aceptará cualquier comando que no sea ambiguo. El nombre del comando de acuerdo con la ayuda es de hecho ".tables" (si alguien todavía está prestando atención). - dbn

(Esta debería ser la respuesta aceptada, es la forma más sqlite-y de hacer las cosas). - dbn

.tables no mostrará tablas si una base de datos abierta a través de ATTACH '<path>' AS <name>;pero la respuesta de lasse servirá. Dado que el OP mencionó ADJUNTAR, 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

@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 compatibles con SQL facilitaría la migración del empaquetado a otros lenguajes que si usara comandos específicos del proveedor de DB. - Valentín Heinitz

Esta respuesta carece de contexto, por lo que no es útil. - Códigos NL23

Parece que necesita pasar por el sqlite_master tabla, como esta:

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

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

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

Respondido el 12 de junio de 14 a las 09:06

No es algo fácil de leer o recordar para usar en el futuro; el incorporado .tables el comando es más intuitivo - user649198

@Gryllida: a pesar de esto, se puede usar desde cualquier API de SQL, ya que es SQL válido. Es posible que los comandos integrados no se admitan en todas partes. - Valentín Heinitz

@DoktorJ Tener .tables ha sido modificado para mostrar tablas de una base de datos adjunta? - Lasse V. Karlsen

En esa base de datos, sí, pero esta pregunta trataba sobre mostrar las tablas en una base de datos que ha adjuntado. Tener el .tables ¿Se ha modificado el comando para mostrarlos también? - Lasse V. Karlsen

Doh! La comprensión de lectura falla ... De alguna manera me las arreglé para no captar la referencia ATTACH ... dos veces> _ <- doctor j

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 hacer un SELECCIONAR * en cada una. ¿Pero tal vez un DUMP es lo que buscas?

Respondido el 17 de Septiembre de 08 a las 14:09

Gracias por la única respuesta que realmente abordó la pregunta ... "¿Qué SQL", no qué comando se puede utilizar ... gracias! - brad parques

Además, esto imprime un nombre de tabla por línea, mientras que .tables imprime múltiples columnas de nombres de tabla (molesto / no útil). - Shane

Utilice la herramienta .help para comprobar los comandos disponibles.

.table

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

Respondido el 12 de junio de 14 a las 09:06

Extraño, debe ser correcto, pero no funciona cuando lo uso. jürgen k.

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

Respondido el 01 de Septiembre de 17 a las 01:09

Para enumerar las tablas también puede hacer:

SELECT name FROM sqlite_master
WHERE type='table';

respondido 13 mar '13, 09:03

Asi que... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""") ¿o no? Eso no me funciona, pero no estoy seguro de dónde se supone que se debe ejecutar este código. - jbuddy_13

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

respondido 13 mar '13, 09:03

Esta es probablemente la mejor forma de hacerlo. - Alix Axel

Esto solo funciona si conoce el nombre de la tabla. No puede usar esto para obtener la lista de nombres de tablas. - eric w

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

Respondido el 01 de Septiembre de 17 a las 01:09

Según la documentación, el equivalente de MySQLs ' 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á comprobando si existe una sola tabla (o para obtener sus detalles), consulte @LuizGeron responder.

contestado el 23 de mayo de 17 a las 13:05

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

.fullschema

para ver todas sus declaraciones de creación.

respondido 18 nov., 15:19

SQLite versión 3.7.13 2012-07-17 17:46:21 Ingrese ".help" para obtener instrucciones Ingrese sentencias SQL terminadas con ";" sqlite> .fullschema Error: comando desconocido o argumentos inválidos: "fullschema". Ingrese ".help" para obtener ayuda: Mona Jalal

Estás usando una versión de 2012 - pimienta

La forma más sencilla de hacer esto es abrir la base de datos directamente y usar el .dump comando, en lugar de adjuntarlo 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

respondido 18 nov., 15:19

Vía 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'

Respondido 13 Oct 16, 22:10

Uso:

import sqlite3

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

respondido 18 nov., 15:19

Dado que nadie ha mencionado sobre 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 sé dónde está el shell de comandos, es decir, 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 SQLite. Cuando se inicializa, de forma predeterminada, esta sesión 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 de la 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 existía previamente. Es posible que desee utilizar un nombre de ruta completo para asegurarse de que el archivo está en el directorio en el que cree que está. Utilice barras inclinadas 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 .mesas 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 el shell SQLite lee de los archivos .db están en la misma ruta.

Respondido el 23 de enero de 16 a las 23:01

El comando ".schema" listará las tablas disponibles y sus filas, mostrándole la declaración utilizada para crear dichas tablas:

sqlite> crear table_a (id int, a int, b int); sqlite> .schema table_a CREAR TABLA table_a (id int, a int, b int);

Respondido el 17 de Septiembre de 08 a las 14:09

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

Las tablas de esta base de datos se pueden ver por

SELECCIONE distinto tbl_name del orden sqlite_master por 1;

Las bases de datos adjuntas necesitan los prefijos que eligió con AS en la declaración ATTACH, por ejemplo aa (, bb, cc ...) entonces:

SELECT distinto tbl_name de aa.sqlite_master ordenar por 1;

Tenga en cuenta que aquí también obtiene las vistas. Para excluir estos agregue donde tipo = 'tabla' antes de 'orden'

respondido 12 nov., 17:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.