执行SQLite脚本


99

我使用以下命令启动sqlite3版本3.7.7,Unix 11.4.2:

sqlite3 auction.db

尚未创建auction.db的位置。

sqlite> auction.db < create.sql;

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

如何运行脚本?

Answers:


127

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

sqlite3 auction.db

其次是:

sqlite> .read create.sql

通常,SQLite项目的文档非常好!我知道我们经常在文档发布之前接触过Google,但就SQLite而言,文档确实是最好的技术写作。干净,清晰,简洁。


4
要在脚本中使用,可以.read直接从sqlite3命令运行命令:sqlite3 autction.db '.read create.sql'
克里斯·伦戈

145

您想要从外壳而不是从SQLite本身内部馈create.sqlsqlite3

$ sqlite3 auction.db < create.sql

SQLite的SQL版本无法识别<文件,而您的Shell可以。


1
不幸的是,并非所有的Shell都将其理解<为输入重定向。(例如,PowerShell。)
Alan

@Alan PowerShell有一些输入重定向机制,不是吗?如果没有的话,总会有bitops的方法。
亩太短

@muistooshort看到我对bitops的评论。sqlite dot命令在sql语句参数中起作用,因此您可以.read所需的文件,而无需诉诸输入重定向。
克里斯·贝克

@ChrisBecke他们是不同的解决方案。<将立即退出SQLite提示,并将错误代码返回到Shell。.read file.sql将保留提示,-init file.sql并将始终返回0,因此<最好是编写脚本。此外,它是跨平台的,与.read不支持Windows路径的不同。
TWiStErRob

23

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

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

2
这实际上是亩太短的答案。
2015年

11
@ColonelThirtyTwo是的,这非常接近mu太短的答案。我增加了一个附加的应答的原因是展示一个方法来快速执行内嵌的命令,而不是采取创建一个SQL文件来存储命令中的额外步骤。
remeika

5
@remeika我认为执行内联命令的更惯用的方法是sqlite3 example.db 'SELECT * FROM some_table;',而不是
传递

1
另外,(在编辑之后)它还演示了sqlite3读取命令不仅要从执行stdin,还要从最后一个参数执行。
拉斐尔·阿尔梅达

4

对于使用PowerShell的用户

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

2

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

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

如果您没有名称为sqlite3的数据库,它将创建一个,并且如果您已经拥有一个数据库,它将以任何方式运行它,但出现“ TABLENAME has exist”错误,我想您也可以使用此命令来更改一个已经存在的数据库数据库(但我不确定)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.