Come visualizzare l'elenco delle tabelle in un file di database SQLite che è stato aperto con ALLEGARE?
Domanda
Cosa SQL può essere utilizzato per visualizzare l'elenco delle tabelle, e le righe all'interno di tali tabelle in un file di database SQLite - una volta che ho collegato con il ATTACH
comando SQLite 3 strumento a riga di comando?
Soluzione
Il .tables
, e .schema
"helper" funzioni non guardare nel database Collegati:solo che la query SQLITE_MASTER
tabella "principale" del database.Di conseguenza, se si è utilizzato
ATTACH some_file.db AS my_db;
allora avete bisogno di fare
SELECT name FROM my_db.sqlite_master WHERE type='table';
Nota che le tabelle temporanee non si presentano con .tables
sia:devi elenco sqlite_temp_master
per che:
SELECT name FROM sqlite_temp_master WHERE type='table';
Altri suggerimenti
Ci sono pochi passi per vedere le tabelle in un database SQLite:
Elenco tabelle del database:
.tables
Elenco di come l'aspetto della tabella:
.schema tablename
Stampare l'intera tabella:
SELECT * FROM tablename;
Elenco di tutte le SQLite prompt dei comandi:
.help
Sembra che avete bisogno di passare attraverso il cui sqlite_master tabella, come questo:
SELECT * FROM dbname.sqlite_master WHERE type='table';
Manualmente e poi passare attraverso ogni tavolo con un SELECT
o simile a guardare le righe.
Il .DUMP
e .SCHEMA
i comandi non apparire a tutti i database.
Per visualizzare tutte le tabelle, utilizzare
SELECT name FROM sqlite_master WHERE type = "table"
Per visualizzare tutte le righe, credo che si possono scorrere tutte le tabelle e basta fare una SELECT * su ciascuno di essi.Ma forse un DUMP è che cosa siete dopo?
Utilizzare .help
per verificare la disponibilità di comandi.
.table
Questo comando mostra tutte le tabelle in database corrente.
C'è un comando disponibile per questo sul SQLite riga di comando:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Che converte in SQL riportato di seguito:
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
Per visualizzare l'elenco delle tabelle si può anche fare:
SELECT name FROM sqlite_master
WHERE type='table';
Provare PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
Io uso questa query per ottenere:
SELECT name FROM sqlite_master WHERE type='table'
E per l'uso in iOS:
NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
Secondo il documentazione, l'equivalente di MySQLs' SHOW TABLES;
è:
L' ".tabelle" di comando è simile all'impostazione di modalità elenco, quindi l'esecuzione di la seguente query:
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;
Tuttavia, se si sta la verifica se una singola tabella esiste (o, per ottenere i suoi dettagli), vedere @LuizGeron risposta.
Come le ultime versioni di SQLite 3 è possibile emettere:
.fullschema
per vedere tutte le istruzioni create.
Il modo più semplice per farlo è quello di aprire direttamente il database e utilizzare il .dump
comando, piuttosto che attaccarlo dopo aver invocato la SQLite 3 strumento di shell.
Quindi...(si supponga che il sistema operativo prompt della riga di comando è di $) invece di $sqlite3
:
sqlite3> ATTACH database.sqlite as "attached"
Dal vostro sistema operativo a linea di comando, aprire direttamente il database:
$sqlite3 database.sqlite
sqlite3> .dump
Uso:
import sqlite3
TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
Tramite un union all
, unire tutte le tabelle in un unico elenco.
select name
from sqlite_master
where type='table'
union all
select name
from sqlite_temp_master
where type='table'
Visto che nessuno ha ricordato il riferimento ufficiale di SQLite, penso che potrebbe essere utile fare riferimento ad esso in questa voce:
https://www.sqlite.org/cli.html
È possibile modificare il database utilizzando i comandi descritti in questo link.Inoltre, se si utilizza il sistema operativo Windows e non si sa dove il comando di shell, che è in SQLite è un sito:
https://www.sqlite.org/download.html
Dopo il download, fare clic su sqlite3.exe file di inizializzazione SQLite comando shell.Quando viene inizializzato, per impostazione predefinita, questo SQLite sessione utilizza un database in memoria, non un file su disco, e così tutte le modifiche andranno perse quando la sessione termina.Per l'utilizzo di un permanente su disco file di database, immettere l' ".aprire ex1.db" comando subito dopo la finestra del terminale si avvia.
L'esempio di cui sopra provoca il file di database di nome "ex1.db" per essere aperto e utilizzato, e creato, se non esisteva in precedenza.Si potrebbe desiderare di utilizzare un nome di percorso completo per garantire che il file è nella directory che si pensa che è in.Utilizzare avanti-taglia come il carattere separatore di directory.In altre parole l'uso "c:/work/ex1.db", non "c:\work\ex1.db".
Per vedere tutte le tabelle del database si è scelto in precedenza, digitare il comando .tavoli come è detto nel link qui sopra.
Se si lavora in Windows, penso che potrebbe essere utile spostare questo sqlite.exe file nella stessa cartella con gli altri file Python.In questo modo, il file Python scrive e SQLite shell di legge .db file nello stesso percorso.
L' ".schema di" commando vi elenco le tabelle e le loro righe, mostrando il comando usato per creare disse tabelle:
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 vedere tutti i database - una chiamata"principale'
le tabelle di questo database può essere visto da
SELECT distinct tbl_name da cui sqlite_master ordine di 1;
Il database collegati bisogno prefissi si è scelto, con la dichiarazione di ALLEGARE ad esempio aa (, bb, cc...) così:
SELECT distinct tbl_name da aa.cui sqlite_master ordine 1;
Nota che qui si ottiene il punto di vista così.Per escludere questi aggiungere where tipo = 'tabella' prima di 'ordine'