【问题标题】:Running a Sqlite3 Script from Command Line从命令行运行 Sqlite3 脚本
【发布时间】:2014-02-13 15:41:02
【问题描述】:

我正在编写一个 shell 脚本来 scp 一个项目,其中一部分涉及在我的数据库中传输一些重要的表。

我在文件SQLTableTransfer 中存储了以下内容:

.o MyTable1.sql;
.dump MyTable1;

.o MyTable2.sql;
.dump MyTable2;

.o MyTable3.sql;
.dump MyTable3;

并抓住了机会

$ sqlite3 SQLTableTransfer

但这只是打开了 Sqlite3 shell。从命令行运行这样的脚本的正确方法是什么?

【问题讨论】:

  • 我看到这样的东西,但那是从命令行执行SQL语言,我需要它来执行Sqlite语言。
  • 如果这些是在 sqlite3 命令行中输入的命令,那么这种方法应该仍然有效。一般的想法是您将文件的内容发送到 sqlite3 的标准输入。因此,它不使用键盘输入,而是使用来自该文件的输入。你试过了吗?

标签: sql bash sqlite shell


【解决方案1】:

你给sqlite3程序的参数是数据库文件名。

要从文件执行命令,您必须将输入重定向到该文件:

$ sqlite3 mydatabase.db < SQLTableTransfer

或告诉它从该文件中读取:

$ sqlite3 mydatabase.db ".read SQLTableTransfer"

【讨论】:

  • 好的,谢谢。但是由于某种原因,当我这样做时使用.dump,它只是转储表PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; COMMIT;
  • 最近我一直在尝试导入一个 utf8 编码的 sql 脚本,其中包含德国 äöüß 等国家字符,结果发现第二种方法是唯一可行的方法。所有其他解决方案都只导入问号(我需要它用于 PowerShell 脚本)。
  • @t3chb0t 这个问题与 Windows 无关。
  • 没关系 :) 它有超过 2k 的视图,所以我猜一般有兴趣在 sqlite3 中导入 sql 脚本的人会来(像我一样),即使与 Windows 没有直接关系,这个解决方案也有效为了我。我认为提及 utf8 连接很重要,因为它在某些系统(例如 Windows)上无法正常工作。我在谷歌上搜索了一个小时才找到这个。
  • @GuilhermeSalomé 如何在 shell 中使用变量将是一个不同的问题。
【解决方案2】:

您可以获得空间表的列表,如下所示:

echo "SELECT f_table_name FROM geometry_columns;" | spatialite -noheader -silent your_db.sqlite

【讨论】:

    【解决方案3】:

    对于那些只想将其转储到.bashrc 的懒人:

    ### Execute an sqlite3 file on a given db
    sql3-exec () {
      # TODO: write a  --help flag that doubles as error handling
      # TODO: Ensure that $1 is a db; Else display --help
      # TODO: Ensure that $2 is a .sql file; Else display --help
      # TODO: Probably store a backup (or at least a flag)...
      sqlite3 $1 ".read $2"
      true
    }
    

    【讨论】:

      【解决方案4】:

      对于 Windows CLI,假设您的数据库已加载:

      sqlite> .read C:\\somesubdir\\some.sql
      

      【讨论】:

        猜你喜欢
        • 2018-10-05
        • 2020-03-15
        • 2012-05-03
        • 2011-05-01
        • 2013-09-14
        • 2013-07-18
        相关资源
        最近更新 更多