Cómo enumerar las tablas en una base de datos SQLite archivo que se abrió con ADJUNTAR?
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?
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:
Lista de las tablas en la base de datos:
.tables
La lista de la tabla que se ve:
.schema tablename
Imprimir toda la tabla:
SELECT * FROM tablename;
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'