it-swarm.it

Come elencare le tabelle in un file di database SQLite aperto con ATTACH?

Quale SQL può essere usato per elencare le tabelle e le righe all'interno di quelle tabelle in un file di database SQLite - una volta che l'ho collegato con il comando ATTACH sullo strumento da riga di comando di SQLite 3?

1119
izb

Le funzioni .tables e .schema "helper" non esaminano i database ATTACHed: interrogano solo la tabella SQLITE_MASTER per il database "principale". Di conseguenza, se hai usato

ATTACH some_file.db AS my_db;

allora devi fare

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

Nota che le tabelle temporanee non vengono visualizzate con .tables: devi elencare sqlite_temp_master per questo:

SELECT name FROM sqlite_temp_master WHERE type='table';
528
Anthony Williams

Ci sono alcuni passaggi per vedere le tabelle in un database SQLite:

  1. Elenca le tabelle nel tuo database:

    .tables
    
  2. Elenca come appare la tabella:

    .schema tablename
    
  3. Stampa l'intera tabella:

    SELECT * FROM tablename;
    
  4. Elenca tutti i comandi del prompt SQLite disponibili:

    .help
    
1238
Mark Janssen

Sembra che tu debba passare attraverso la tabella sqlite_master , in questo modo:

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

E poi scorrere manualmente ciascuna tabella con un SELECT o simile per guardare le righe.

I comandi .DUMP e .SCHEMA non sembrano vedere il database.

Per mostrare tutti i tavoli, usa

SELECT name FROM sqlite_master WHERE type = "table"

Per mostrare tutte le righe, suppongo che tu possa scorrere tutte le tabelle e fare un SELECT * su ciascuna di esse. Ma forse un DUMP è quello che cerchi?

153
Christian Davén

Utilizzare .help per verificare i comandi disponibili.

.table

Questo comando mostrerebbe tutte le tabelle sotto il tuo attuale database.

68
Antony.H

C'è un comando disponibile per questo sulla riga di comando di SQLite:

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

Che converte in SQL seguente:

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
40
flubba

Per elencare le tabelle puoi anche fare:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

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

29
Luiz Geron

Io uso questa query per ottenerlo:

SELECT name FROM sqlite_master WHERE type='table'

E da usare in iOS:

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

Secondo la documentazione , l'equivalente di SHOW TABLES; di MySQL è:

Il comando ".tables" è simile alla modalità lista delle impostazioni, quindi esegue 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 stai verificando se esiste una singola tabella (o per ottenere i suoi dettagli), vedi @ LuizGeron risposta.

16
Alix Axel

A partire dalle ultime versioni di SQLite 3 puoi rilasciare:

.fullschema

per vedere tutte le tue dichiarazioni di creazione.

15
pepper

Il modo più semplice per farlo è aprire direttamente il database e utilizzare il comando .dump, anziché collegarlo dopo aver richiamato lo strumento Shell di SQLite 3.

Quindi ... (si supponga che il prompt della riga di comando del sistema operativo sia $) anziché $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

Dalla riga di comando del SO, apri direttamente il database:

$sqlite3 database.sqlite
sqlite3> .dump
11
Noah

Tramite union all, unisci 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'
9
openwonk

Uso:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
Mrityunjay Singh

Poiché nessuno ha menzionato il riferimento ufficiale di SQLite, penso che possa essere utile riferirsi a questo sotto questo titolo:

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

Puoi manipolare il tuo database usando i comandi descritti in questo link. Inoltre, se stai usando il SO Windows e non sai dove si trova il comando Shell, questo è nel sito di SQLite:

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

Dopo averlo scaricato, fai clic sul file sqlite3.exe per inizializzare il comando SQLite Shell . Quando viene inizializzato, per impostazione predefinita questa sessione SQLite utilizza un database in memoria, non un file su disco, quindi tutte le modifiche andranno perse all'uscita dalla sessione. Per utilizzare un file disco persistente come database, immettere il comando ".open ex1.db" immediatamente dopo l'avvio della finestra del terminale.

L'esempio precedente provoca l'apertura e l'utilizzo del file di database denominato "ex1.db" e creato se non esiste in precedenza. Potresti voler utilizzare un percorso completo per assicurarti che il file si trovi nella directory in cui pensi che sia. Utilizza le barre di avanzamento come carattere separatore di directory. In altre parole, usa "c: /work/ex1.db", non "c:\work\ex1.db".

Per vedere tutte le tabelle nel database che hai scelto in precedenza, digita il comando . Tables come si dice nel link sopra.

Se lavori su Windows, penso che potrebbe essere utile spostare questo file sqlite.exe nella stessa cartella con gli altri file Python. In questo modo, il file Python scrive e le letture della shell SQLite dai file .db si trovano nello stesso percorso.

7
oiyio

Il comando ".schema" elencherà le tabelle disponibili e le loro righe, mostrandoti l'istruzione usata per creare dette tabelle:

 sqlite> crea table_a (id int, a int, b int); 
 sqlite> .schema table_a 
 CREATE TABLE table_a (id int, a int, b int); 
5
trf

.da per vedere tutti i database - uno chiamato ' main '

le tabelle di questo database possono essere viste da

SELEZIONA distinto tbl_name dall'ordine sqlite_master di 1;

I database allegati hanno bisogno dei prefissi che hai scelto con AS nella dichiarazione ATTACH, ad es. aa (, bb, cc ...) quindi:

SELEZIONA distinto tbl_name da aa.sqlite_master ordina per 1;

Si noti che qui si ottengono anche le viste. Per escludere questi aggiungi dove type = 'table' prima di 'order'

1
Klaas-Z4us-V