【问题标题】:Execute SQLite script执行 SQLite 脚本
【发布时间】:2012-07-23 12:33:44
【问题描述】:

我使用以下命令启动 sqlite3 版本 3.7.7、unix 11.4.2:

sqlite3 auction.db

还没有创建auction.db。

sqlite> auction.db < create.sql;

给我这个错误:near "auction": syntax error

如何运行脚本?

【问题讨论】:

    标签: sqlite


    【解决方案1】:
    sqlite3 -init create.sql auction.db .quit
    

    当我输入命令man sqlite3 时,我在“OPTIONS”下看到:

    -init 文件
    file 读取和执行命令,其中可以包含 SQL 语句和元命令的混合。

    在“SQLITE META-COMMANDS”下:

    .quit               退出此程序

    另请参阅:Command Line Shell For SQLite: 3. Special commands to sqlite3 (dot-commands)

    另外,当我输入命令sqlite3 -help 时,我在“OPTIONS”下看到:

    -init FILENAME     读取/处理命名文件

    【讨论】:

      【解决方案2】:

      如果您使用的是 windows CMD,您可以使用此命令使用 sqlite3 创建数据库

      C:\sqlite3.exe DBNAME.db ".read DBSCRIPT.sql"
      

      如果你还没有同名的数据库,sqlite3 会创建一个,如果你已经有一个,它仍然会运行它但是出现“TABLENAME 已经存在”错误,我想你也可以使用这个命令来改变一个已经存在的数据库(但我不确定)

      【讨论】:

        【解决方案3】:

        对于那些使用 PowerShell 的人

        PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db
        

        【讨论】:

          【解决方案4】:

          有很多方法可以做到这一点,一种方法是:

          sqlite3 auction.db

          接着是:

          sqlite&gt; .read create.sql

          总的来说,SQLite 项目的文档非常棒!我知道我们经常在文档之前联系 Google,但在 SQLite 的案例中,文档确实是最好的技术写作。它干净、清晰、简洁。

          【讨论】:

          【解决方案5】:

          为了执行简单的查询并返回我的 shell 脚本,我认为这很好用:

          $ sqlite3 example.db 'SELECT * FROM some_table;'
          

          【讨论】:

          • 这实际上是 mu is too short 的答案。
          • @ColonelThirtyTwo 是的,这与 mu is too short 的答案非常接近。我添加额外答案的原因是为了演示一种快速执行内联命令的方法,而不是采取额外的步骤来创建 SQL 文件来存储命令。
          • @remeika 我认为执行内联命令更惯用的方式是sqlite3 example.db 'SELECT * FROM some_table;',而不是管道回显
          • 另外,(在编辑之后),它表明sqlite3 不仅从stdin 读取要执行的命令,还从最后一个参数中读取。
          【解决方案6】:

          您想从 shell 将 create.sql 提供给 sqlite3,而不是从 SQLite 内部:

          $ sqlite3 auction.db < create.sql
          

          SQLite 的 SQL 版本不理解 &lt; 的文件,你的 shell 可以。

          【讨论】:

          • 不幸的是,并非所有 shell 都将 &lt; 理解为输入重定向。 (例如,PowerShell。)
          • @Alan PowerShell 有一些输入重定向机制,不是吗?如果不是,总是有bitops's 方法。
          • @muistooshort 查看我对 bitops 的评论。 sqlite dot 命令在 sql 语句参数中工作,因此您可以 .read 所需的文件,而无需诉诸输入重定向。
          • @ChrisBecke 他们是不同的解决方案。 &lt; 将立即退出 SQLite 提示并将错误代码返回给 shell。 .read file.sql 将离开提示,-init file.sql 将始终返回 0,因此 &lt; 是编写脚本的最佳选择。与不支持 Windows 路径的 .read 不同,它也是跨平台的。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-10
          • 2017-06-29
          • 2019-08-14
          相关资源
          最近更新 更多