Come posso ottenere l’elenco di una colonna in una tabella per un database SQLite?

Sto cercando di recuperare un elenco di colonne in una tabella. Il database è l’ultima versione di SQLite (3.6, credo). Sto cercando il codice che fa questo con una query SQL. Punti bonus extra per i metadati relativi alle colonne (ad es. Lunghezza, tipo di dati, ecc …)

Quello che stai cercando è chiamato dizionario dei dati. In sqlite è ansible trovare una lista di tutte le tabelle interrogando la tabella sqlite_master (o la vista?)

sqlite> create table people (first_name varchar, last_name varchar, email_address varchar); sqlite> select * from sqlite_master; table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar) 

Per ottenere informazioni sulla colonna è ansible utilizzare l’ pragma table_info(table_name) :

 sqlite> pragma table_info(people); 0|first_name|varchar|0||0 1|last_name|varchar|0||0 2|email_address|varchar|0||0 

Per ulteriori informazioni sulle istruzioni pragma, consultare la documentazione .

Ecco il modo semplice:

 .schema 

entra nella tua shell sqlite:

 $ sqlite3 path/to/db.sqlite3 

e poi colpisci

 sqlite> .schema 

e otterrai tutto

La domanda è vecchia ma il seguente non è stato ancora menzionato.

Un altro modo conveniente in molti casi è di triggersre le intestazioni di:

 sqlite> .headers on 

Poi,

 sqlite> SELECT ... FROM table 

visualizzerà un titolo che mostra tutti i campi selezionati (tutti se SELEZIONA *) nella parte superiore dell’output.

Ecco un’istruzione SELECT che elenca tutte le tabelle e le colonne nel database corrente:

 SELECT m.name as tableName, p.name as columnName FROM sqlite_master m left outer join pragma_table_info((m.name)) p on m.name <> p.name order by tableName, columnName ; 

Basandosi su quanto sopra, puoi fare tutto in una volta:

 sqlite3 yourdb.db ".schema" 

Questo ti darà l’SQL per creare la tabella, che è effettivamente un elenco delle colonne.

Lo so, è passato molto tempo ma non è mai troppo tardi … Ho avuto una domanda simile con TCL come interprete e dopo diverse ricerche, non ho trovato nulla di buono per me. Quindi propongo qualcosa basato su PRAGMA, sapendo che il tuo DB è “principale”

 db eval { PRAGMA main.table_info() } TBL { puts $TBL(name) } 

E l’array usa per ottenere una lista

 set col_list {} db eval { PRAGMA main.table_info() } TBL { lappend col_list $TBL(name) } puts $col_list