sqlite3 命令行 - 如何一步设置模式和导入

dot*_*dot 2 command-line csv sqlite

我需要能够通过命令行一步完成此操作:

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
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

 lab-1:/etc/scripts# sqlite3 test.db ".mode csv ; .import /tmp/deleteme.csv users"
Run Code Online (Sandbox Code Playgroud)

 lab-1:/etc/scripts# sqlite3 test.db ".mode csv .import /tmp/deleteme.csv users"
Run Code Online (Sandbox Code Playgroud)

我没有收到错误,但我也没有在用户表中得到任何数据。

任何提示将不胜感激。

Kus*_*nda 6

SQLite 元命令不是;由换行符而是由换行符终止。因此,您必须以其他方式提供命令,以便在正确的位置插入换行符。

这里有几个例子,我可能会使用第一个(因为它是可读的)。

  1. 使用此处的文档:

    sqlite3 testdb <<END_COMMANDS
    .mode csv
    .import /tmp/deleteme.csv users
    END_COMMANDS
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用以下命令格式化命令printf

    printf '.mode csv\n.import /tmp/deleteme.csv users\n' | sqlite3 test.db
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用带有 C-escapes 的 here-string(在支持它的 shell 中):

    sqlite3 test.db <<<$'.mode csv\n.import /tmp/deleteme.csv users\n'
    
    Run Code Online (Sandbox Code Playgroud)