Cómo enumerar las tablas en una base de datos SQLite archivo que se abrió con ADJUNTAR?

StackOverflow https://stackoverflow.com/questions/82875

  •  01-07-2019
  •  | 
  •  

Pregunta

Lo SQL se puede utilizar para enumerar las mesas, y las filas de las tablas en una base de datos SQLite archivo - una vez que haya conectado con el ATTACH comando en el SQLite 3 herramienta de línea de comandos?

¿Fue útil?

Solución

El .tables, y .schema "helper" funciones no mirar Adjunta bases de datos:simplemente consulta el SQLITE_MASTER mesa para la "principal" de la base de datos.En consecuencia, si usted utiliza

ATTACH some_file.db AS my_db;

entonces usted necesita para hacer

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

Tenga en cuenta que las tablas temporales no se muestran con .tables ya sea:tiene lista de sqlite_temp_master para que:

SELECT name FROM sqlite_temp_master WHERE type='table';

Otros consejos

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

  1. Lista de las tablas en la base de datos:

    .tables
    
  2. La lista de la tabla que se ve:

    .schema tablename
    
  3. Imprimir toda la tabla:

    SELECT * FROM tablename;
    
  4. Lista de todos los disponibles SQLite prompt de comandos:

    .help
    

Parece que usted necesita para ir a través de la sqlite_master tabla como esta:

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

Y, a continuación, pasar manualmente a través de la mesa, con un SELECT o similar para buscar en las filas.

El .DUMP y .SCHEMA los comandos no parecen ver la base de datos.

Para mostrar todas las tablas, el uso de

SELECT name FROM sqlite_master WHERE type = "table"

Para mostrar todas las filas, supongo que se puede recorrer a través de todas las tablas y acaba de hacer un SELECT * en cada uno de ellos.Pero tal vez un DUMP es lo que está después?

Uso .help para comprobar los comandos disponibles.

.table

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

Hay un comando disponible en el SQLite línea de comandos:

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

Que convierte a la siguiente instrucción 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

A la lista de las tablas también se pueden hacer:

SELECT name FROM sqlite_master
WHERE type='table';

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

Yo uso esta consulta para conseguirlo:

SELECT name FROM sqlite_master WHERE type='table'

Y para el uso en iOS:

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

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

El ".las tablas de" comando es similar a la configuración de modo de lista, a continuación, 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 usted está comprobando si una tabla existe (o para obtener los detalles), ver @LuizGeron respuesta.

En cuanto a las últimas versiones de SQLite 3 puede emitir:

.fullschema

para ver todas las instrucciones create.

La manera más fácil de hacer esto es abrir la base de datos directamente y el uso de la .dump comando, en lugar de unirlo después de invocar el SQLite 3 la concha de la herramienta.

Así que...(suponga que su sistema operativo en la línea de comandos es de us $) en lugar de $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

A partir de su sistema operativo de línea de comandos, abra la base de datos directamente:

$sqlite3 database.sqlite
sqlite3> .dump

Uso:

import sqlite3

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

A través de un union all, combinar 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'

Ya que nadie ha mencionado acerca de la referencia oficial de SQLite, creo que puede ser útil referirse a ella en virtud de este título:

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

Puede manipular la base de datos mediante los comandos que se describen en este enlace.Además, si usted está utilizando el sistema operativo Windows y no sé de dónde el shell de comandos, que es en el SQLite del sitio:

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

Después de la descarga, haga clic en sqlite3.exe archivo para inicializar el SQLite shell de comandos.Cuando se inicializa por defecto, este SQLite sesión está utilizando una base de datos en memoria, no un archivo en el disco, y así que todos los cambios se perderán cuando la sesión termina.El uso de una persistente archivo de disco como la base de datos, introduzca el ".abierto ex1.db" comando inmediatamente después de la ventana de terminal se inicia.

El ejemplo anterior hace que el archivo de base de datos denominado "ex1.db" para ser abierto y usado, y las crea si no existe ya.Puede que desee utilizar una ruta de acceso completa para asegurarse de que el archivo está en el directorio que usted piensa que es.Utilice hacia adelante-barras como el carácter de separación 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 elegida previamente, escriba el comando .tablas como se dice en el enlace de arriba.

Si trabajas en Windows, yo creo que puede ser útil para mover esto sqlite.exe archivo a la misma carpeta con el resto de los archivos de Python.De esta manera, el archivo de Python escribe y el SQLite shell lee .db archivos están en el mismo camino.

El "."esquema de comando mostrará la lista de tablas disponibles y sus filas, mostrando que la declaración se utiliza para crear dijo: 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 - uno llamado 'principal'

las tablas de esta base de datos puede ser visto por

SELECT distinct tbl_name de sqlite_master order by 1;

El adjunto de bases de datos necesitan prefijos eligió COMO en la declaración de ADJUNTAR por ejemplo, aa (, bb, cc...) así:

SELECT distinct tbl_name de aa.sqlite_master orden de 1;

Tenga en cuenta que aquí puede obtener los puntos de vista.Para excluir estas agregar donde type = 'tabla' antes de 'orden'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top