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 extra bonus per i metadati relativi alle colonne (lunghezza per esempio, tipo di dati, ecc ...)Come posso ottenere l'elenco di una colonna in una tabella per un database SQLite?
risposta
Quello che stai cercando si chiama il dizionario dei dati. In SQLite un elenco di tutte le tabelle può essere trovato eseguendo una query tabella sqlite_master
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 le informazioni di colonna è possibile utilizzare il pragma table_info(table_name)
economico (o vedere?):
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 sul pragma dichiarazioni, vedere documentation.
basta andare nella vostra shell sqlite:
$ sqlite3 path/to/db.sqlite3
e poi basta premere
sqlite> .schema
e otterrete tutto.
Ecco il modo più semplice:
.schema <table>
Questa dovrebbe essere la risposta. –
@EhteshChoudhury no non dovrebbe, la domanda richiede una query SQL e questo non è uno. – jazzpi
La domanda è vecchia ma il seguente non è stato ancora citato.
Un altro modo conveniente in molti casi è quello di trasformare le intestazioni su da:
sqlite> .headers on
Poi,
sqlite> SELECT ... FROM table
visualizzerà un titolo che mostra tutti i campi selezionati (tutto Selezionando *) presso il in cima all'output.
costruzione di quanto sopra, si può fare tutto in una volta:
sqlite3 yourdb.db ".schema"
che vi darà la 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 varie ricerche, non ho trovato nulla di buono per me. Quindi propongo qualcosa sulla base di PRAGMA, sapendo che il vostro DB è “principale”
db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }
E l'uso di matrice per ottenere un elenco
set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
Grande! Ora, come viene fatto fuori dalla linea di comando? Come viene fatto all'interno del mio programma C? –
come posso implementare come sopra in Objective-C –
@Nag, penserei che SQLite deve solo trattare questi comandi come SQL ordinaria, processo di conseguenza, e restituire un set di risultati. –