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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top