Semplice tabella SQLITE / Domanda di importazione
-
16-09-2020 - |
Domanda
Ho una semplice domanda SQL.Voglio creare un database a 3 colonne e ho il seguente codice:
sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"
.
Quando provo ad importare un semplice file CSV con due colonne (Prideid e PubMedID), ottengo una "prevista 3 colonne di dati ma trovata 2" Errore.Voglio che il T1key sia un intero, e contare automaticamente come vengono aggiunti nuovi campi.Devo non mettere nulla davanti alla chiave primaria per farlo per lavorare?
Soluzione
.import
non supporta la rimodellazione dell'ingresso (tranne che dall'impostazione del separatore).È necessario importare il file CSV in una tabella temporanea e inserire che nella tabella reale.Ecco una sessione di esempio:
$ cat a.csv
1,2
3,4
5,6
$ sqlite3 a.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo(id integer primary key,x,y);
sqlite> create temp table footmp(x,y);
sqlite> .separator ,
sqlite> .import a.csv footmp
sqlite> select * from footmp;
1,2
3,4
5,6
sqlite> insert into foo(x,y) select * from footmp;
sqlite> select * from foo;
1,1,2
2,3,4
3,5,6
sqlite> drop table footmp;
.
Vedi che l'ID è contato.Questo perché una colonna con tipo di tasto principale integro è considerata come alias per il rowid interno - che è sempre un numero unico e ascendente.
Altri suggerimenti
invece di insert
Usa
create table newtable as select * from footmp;
.
È migliore e veloce.
con la .Versione di SQLite ( SQLite 3.7.15.2 2013-01-09 ) Sono acceso, non devi prima importare in un tavolo TEMP.Tutto quello che ho fatto era quello di assicurarsi di impostare un separatore prima di iniziare l'importazione.Ho specificato i valori ID per ogni riga, quindi, la mia prima colonna nel CSV è stata una serie di numeri interi unici