【问题标题】:Export from sqlite to csv using shell script使用 shell 脚本从 sqlite 导出到 csv
【发布时间】:2011-08-12 05:02:54
【问题描述】:

我正在制作一个 shell 脚本来将 sqlite 查询导出到 csv 文件,就像这样:

 #!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db ".headers on"
./bin/sqlite3 ./sys/xserve_sqlite.db ".mode csv"
./bin/sqlite3 ./sys/xserve_sqlite.db ".output out.csv"
./bin/sqlite3 ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;"
./bin/sqlite3 ./sys/xserve_sqlite.db ".exit"

执行脚本时,输出显示在屏幕上,而不是保存到“out.csv”。它正在使用命令行执行相同的方法,但我不知道为什么 shell 脚本无法将数据导出到文件。

我做错了什么?

【问题讨论】:

    标签: sqlite shell csv


    【解决方案1】:

    您可以使用 sqlite3 命令选项来代替点命令:

    sqlite3 -header -csv my_db.db "select * from my_table;" > out.csv
    

    这使它成为单线。

    另外,你可以运行一个 sql 脚本文件:

    sqlite3 -header -csv my_db.db < my_script.sql > out.csv
    

    使用sqlite3 -help 查看可用选项列表。

    【讨论】:

    • 好多了,好多了...这应该是公认的解决方案!亲吻 :-)
    • 此解决方案也适用于 Windows,前提是 sqlite3 在您的路径或同一目录中。
    【解决方案2】:

    sqlite3

    您对每一行都单独调用sqlite3;当您的select 运行时,您的.out out.csv 已被遗忘。

    试试:

    #!/bin/bash
    ./bin/sqlite3 ./sys/xserve_sqlite.db <<!
    .headers on
    .mode csv
    .output out.csv
    select * from eS1100_sensor_results;
    !
    

    改为。

    sh/bash 方法

    您可以使用重定向调用您的脚本:

    $ your_script >out.csv
    

    或者您可以在脚本的第一行插入以下内容:

    exec >out.csv
    

    前一种方法允许您指定不同的文件名,而后一种方法输出到特定的文件名。在这两种情况下,.output out.csv 行都可以忽略。

    【讨论】:

    • 太好了,谢谢,现在可以使用了! (它需要“>>”而不是“>”,但我是 linux 的新手 :D)
    • 如果此处的答案确实回答了您的问题,您应该点击答案总票数下方的复选标记(它应该显示为浅灰色)。这将问题标记为已回答。
    • 抱歉耽搁了,我是真正的新手 :D
    • &lt;&lt;! ... ! 正是我所需要的。谢谢。
    【解决方案3】:

    我最近创建了一个 shell 脚本,它能够从 db 文件中获取表并将它们转换为 csv 文件。

    https://github.com/darrentu/convert-db-to-csv

    如有任何关于我的脚本的问题,请随时问我 :)

    【讨论】:

    • 这对我有帮助。你应该将你的 10 行代码复制粘贴到你的答案中,这样我已经给出的赞成票会感觉更合理。
    • 脚本在表名周围缺少引号(如果表名有破折号,则会引发错误)
    【解决方案4】:

    虽然问题是关于 shell 脚本的,但我认为它会帮助那些只是为将数据从 sqlite3 数据库传输到 csv 文件而烦恼的人。

    我找到了一种非常方便的方法,可以通过使用 SQLite Manager 扩展的 firefox 浏览器来完成。

    只需在 Firefox(SQlite 管理器 -> 连接数据库)中连接到您的 sqlite 数据库文件,然后连接到表 -> 导出表。您将获得更多选项,您可以点击并尝试......

    最后你会得到一个包含你选择导出的表的 csv 文件。

    【讨论】:

      【解决方案5】:
      Using command line for Linux:
      
      user@dell-Admin: sqlite3 #activate your sqlite database first
      sqlite> .tables #search for tables if any available if already created one.
      sqlite> .schema #if you want to check the schema of the table.
      
      # once you find your table(s), then just do the following:
      
      sqlite> .headers on   #export along with headers (column names)
      sqlite> .mode csv     #file type is csv
      sqlite> .output example.csv   #you want to provide file name to export
      sqlite> SELECT * from events;    #If entire table is needed or select only required
      sqlite> .quit    #finally quit the sqlite3
      

      现在在您的系统中搜索 example.csv 文件,您将得到它。

      【讨论】:

        【解决方案6】:

        一行是

        sqlite3 -header -csv ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;" >./out.csv
        

        【讨论】:

          【解决方案7】:

          到目前为止的答案综合:

          function sqlite2csv-table() {
              local db="${1}" table="${2}" output="${3}"
              if test -z "$output" ; then
                  output="${db:r}_hi${table}.csv"
              fi
              [[ "$output" =~ '.csv$' ]] || output+='.csv'
          
              echo "$0: outputting table '$table' to '$output'"
              sqlite3 -header -csv "$db" "select * from ${table};" > "$output" || return $?
          }
          function sqlite2csv() {
              local db="${1}" o="${2}"
          
              tables=($(sqlite3 $db ".tables")) 
              local t
              for table in $tables[@] ; do
                  sqlite2csv-table "$db" "$table" "${o}_${table}.csv"
              done
          }
          

          用法:

          sqlite2csv some.db [/path/to/output]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-02
            • 2021-01-04
            • 2019-10-29
            • 2011-01-28
            • 1970-01-01
            • 2014-05-15
            相关资源
            最近更新 更多