administrador sqlite sqlite3 tsv

administrador - importación de sqlite3 con comillas



sqlite windows (3)

Estoy tratando de importar una colección de datos que tiene citas dentro de los campos. Actualmente están separados por tabuladores.

Por lo que puedo entender de acuerdo con los documentos ( http://www.sqlite.org/cvstrac/wiki?p=ImportingFiles ), el shell sqlite debe interpretar las comillas literalmente y supongo que eso significa que no debería tener un problema.

Me he encontrado con un problema en esta línea:

1193782372 Lips Like Sugar (12" Mix) Echo & the Bunnymen 80''s/12": The Extended Collection a76d9b04-51d9-4672-801f-356ab36dbae7 ccd4879c-5e88-4385-b131-bf65296bf245 1abb270a-e791-407f-a989-ff3ad6f8401c

Como no está claro dónde están las pestañas, las he incluido en esta línea.

1193782372/tLips Like Sugar (12" Mix)/tEcho & the Bunnymen/t80''s/12": The Extended Collection/ta76d9b04-51d9-4672-801f-356ab36dbae7/tccd4879c-5e88-4385-b131-bf65296bf245/t1abb270a-e791-407f-a989-ff3ad6f8401c

Intento hacer lo siguiente pero obtengo un error.

sqlite> .separator /t sqlite> .import ./file.txt table Error: ./file.txt line n: expected 7 columns of data but found 5

Funciona sin las comillas dobles, pero las comillas son importantes. No parece ser capaz de escapar de las comillas con /" tampoco.

¿Cómo puedo importar correctamente los datos que quiero?


La herramienta .import de Sqlite3 se comporta como si su entrada estuviese en formato de valores separados por comas, incluso si .separator no es una coma. Puede escapar de las comillas (") duplicándolas (" ") y citando todo el campo en el que aparecen.

Obtuve una importación limpia de los datos de prueba después de ejecutarla a través del siguiente filtro:

sed ''s/"/""/g;s/[^/t]*/"&"/g'' file.txt >quoted.txt


La herramienta de línea de comandos sqlite3 no es muy flexible en cuanto a los formatos de importación que admite.

Tú podrías

  • cambie el archivo de importación para agregar comillas dobles y escape las comillas dobles en los campos; o
  • convierta el archivo de importación en una serie de sentencias SQL:

    INSERT INTO MyTable VALUES( 1193782372, ''Lips Like Sugar (12" Mix)'', ''Echo & the Bunnymen 80''''s/12": The Extended Collection'', ''a76d9b04-51d9-4672-801f-356ab36dbae7'', ''ccd4879c-5e88-4385-b131-bf65296bf245'', ''1abb270a-e791-407f-a989-ff3ad6f8401c'');

    o

  • escribe tu propia herramienta de importación.

La página web a la que hace referencia es antigua (observe la parte de cvstrac de la URL, que es el regalo; sqlite usa fósil ahora, no cvs). La versión más nueva de esa página web está aquí .

Dado que SQLite es un software de dominio público, una solución a su problema es arreglar el shell.c de sqlite para manejar su formato de archivo correctamente. El problema está alrededor de la línea 1861 que hace

if( c==''"'' ) inQuote = !inQuote;

Si no desea delimitar las comillas, solo comente esta línea. El propósito de la línea es que pueda incrustar delimitadores en sus columnas citando la columna.

Otro enfoque es usar un Administrador de base de datos que admita SQLite; hay muchos de ellos, y la mayoría afirma que admite la importación / exportación de archivos.