sqlite3 linha de comando - como definir o modo e importar em uma única etapa

1

Eu preciso fazer isso por meio da linha de comando em uma etapa:

lab-1:/etc/scripts# sqlite3 test.db
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .mode csv ;
sqlite> .import /tmp/test.csv users
sqlite> select * from users;
John,Doe,au,0,"",1,5555,91647fs59222,audio
sqlite> .quit

Eu tentei o seguinte:

 lab-1:/etc/scripts# sqlite3 test.db ".mode csv ; .import /tmp/deleteme.csv users"

e

 lab-1:/etc/scripts# sqlite3 test.db ".mode csv .import /tmp/deleteme.csv users"

Eu não recebo erros, mas também não tenho dados na tabela de usuários.

Alguma dica seria apreciada.

    
por dot 23.05.2018 / 20:46

1 resposta

4

Os meta-comandos SQLite não são terminados por ; , mas por nova linha. Portanto, você terá que fornecer os comandos de alguma outra forma para que as novas linhas sejam inseridas nos lugares corretos.

Aqui estão alguns exemplos, dos quais eu provavelmente usaria o primeiro (porque é legível).

  1. Use um documento aqui:

    sqlite3 testdb <<END_COMMANDS
    .mode csv
    .import /tmp/deleteme.csv users
    END_COMMANDS
    
  2. Formate os comandos com printf :

    printf '.mode csv\n.import /tmp/deleteme.csv users\n' | sqlite3 test.db
    
  3. Use um string aqui com escapes C (em shells que o suportem):

    sqlite3 test.db <<<$'.mode csv\n.import /tmp/deleteme.csv users\n'
    
por 23.05.2018 / 21:09