执行SQLite脚本

Ros*_*one 81 sqlite

我使用这个命令启动sqlite3版本3.7.7,unix 11.4.2:

sqlite3 auction.db
Run Code Online (Sandbox Code Playgroud)

其中auction.db尚未创建.

sqlite> auction.db < create.sql;
Run Code Online (Sandbox Code Playgroud)

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

我该如何运行脚本?

mu *_*ort 124

你想喂create.sqlsqlite3从外壳,而不是来自内部的SQLite本身:

$ sqlite3 auction.db < create.sql
Run Code Online (Sandbox Code Playgroud)

SQLite的SQL版本<对文件不了解,你的shell也是如此.

  • 不幸的是,并非所有 shell 都将 `&lt;` 理解为输入重定向。(例如,PowerShell。) (2认同)
  • @ChrisBecke 他们是不同的解决方案。`&lt;` 将立即退出 SQLite 提示符并将错误代码返回到 shell。`.read file.sql` 将保留提示符,而 `-init file.sql` 将始终返回 0,因此 `&lt;` 最适合编写脚本。而且它是跨平台的,与不支持 Windows 路径的“.read”不同。 (2认同)

bit*_*ops 110

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

sqlite3 auction.db

其次是:

sqlite> .read create.sql

一般来说,SQLite项目有很棒的文档!我知道我们经常在文档之前联系谷歌,但在SQLite的情况下,文档确实是最好的技术写作.它干净,清晰,简洁.

  • 要在脚本中使用,您可以直接从“sqlite3”命令运行“.read”命令:“sqlite3 autction.db '.read create.sql'”。 (10认同)

rem*_*ika 19

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

$ sqlite3 example.db 'SELECT * FROM some_table;'
Run Code Online (Sandbox Code Playgroud)

  • @ColonelThirtyTwo是的,这非常接近_mu太短_的答案.我添加一个额外答案的原因是为了演示一种快速执行内联命令的方法,而不是采取额外的步骤来创建一个SQL文件来存储命令. (10认同)
  • @remeika我认为执行内联命令的更惯用的方法是`sqlite3 example.db'SELECT*FROM some_table;'`,而不是管道回声 (5认同)
  • 这实际上是_mu太短_的答案. (2认同)

rob*_*pim 7

对于那些使用 PowerShell 的人

PS C:\> Get-Content create.sql -Raw | sqlite3 auction.db
Run Code Online (Sandbox Code Playgroud)


ma1*_*w28 7

sqlite3 -init create.sql auction.db .quit\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\n

-init file
\n\xc2\xa0 \xc2\xa0 \xc2\xa0\xc2\xa0 从file读取并执行命令,该文件可以包含 SQL 语句和元命令的混合。

\n
\n

在“SQLITE 元命令”下:

\n
\n

.quit\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 退出此程序

\n
\n

另请参阅:SQLite 的命令行 Shell:3. sqlite3 的特殊命令(点命令)

\n

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

\n
\n

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

\n
\n


Dav*_*run 6

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

C:\sqlite3.exe DBNAME.db ".read DBSCRIPT.sql"
Run Code Online (Sandbox Code Playgroud)

如果您没有该名称的数据库,sqlite3 将创建一个,如果您已经有一个,它无论如何都会运行它,但出现“TABLENAME 已存在”错误,我认为您也可以使用此命令来更改已经存在的数据库数据库(但我不确定)