Pregunta

Tengo una pregunta SQL simple.Quiero hacer una base de datos de 3 columnas y tengo el siguiente código:

sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"

Cuando intento importar un archivo CSV simple con dos columnas (Prideid y PubMedid), obtengo un error "Se esperan 3 columnas de datos pero encontradas 2".Quiero que el T1Key sea un número entero, y cuenta automáticamente a medida que se agreguen nuevos campos.¿Tengo que poner nada en frente de la clave principal para que esto funcione?

¿Fue útil?

Solución

.import no admite remodelación de la entrada (excepto desde la configuración del separador).Debe importar el archivo CSV en una tabla temporal y el inserte en la tabla real.Aquí hay una sesión de ejemplo:

$ 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; 

Usted ve que la identificación se cuenta.Esto se debe a que una columna con la clave primaria de tipo entero se trata como un alias para el ROADID interno, que siempre es un número único y ascendente.

Otros consejos

en lugar del uso de insert

create table newtable as select  * from  footmp;

es mejor y más rápido.

Con la .versión de SQLite ( sqlite 3.7.15.2 2013-01-09 ) Estoy en, no tiene que importar primero en una tabla de temperatura.Todo lo que hice fue asegurarme de que establezca un separador antes de comenzar la importación.Hice especificar los valores de identificación para cada fila, por lo que, mi primera columna en el CSV fue un conjunto de enteros únicos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top