为什么这个sqlite3命令交互式工作但不是批量工作?

时间:2014-11-19 16:57:21

标签: bash sqlite

我想创建一个批处理脚本来删除我的数据库中的所有记录。

如果我启动命令行界面,我没有问题:

[tomcat@scsrv26v pycsw]$ sqlite3 /var/www/pycsw/tests/suites/cite/data/records.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> delete from records;
sqlite> .quit

但是如果我尝试从批处理中运行它,它就不起作用:

#!/bin/bash
sqlite3 -batch /var/www/pycsw/tests/suites/cite/data/records.db <<"EOF"
delete from records;
.quit
EOF

这是我得到的错误:

Error: near line 1: no such table: records

知道问题是什么吗?

2 个答案:

答案 0 :(得分:1)

这是我第一次看到指定的语法。对不起,我不知道它是如何工作的。

但这可以通过((我在windows批处理文件中使用这个,据我所知也在linux中)来解决:

直接从命令行命令

sqlite3 records.db 'delete from records'

命令管道传输到sqlite

echo delete from records; | sqlite3 records.db 

当然,您可以将命令放在文件中并重定向到sqlite

sqlite3 records.db < myCommands.sql

答案 1 :(得分:0)

可能是.db文件参数的路径(参见No Such Table error)。如果.db不存在,则使用空db文件创建。

要测试,看看是否有效:

#!/bin/bash
sqlite3 -batch tests/suites/cite/data/records.db <<"EOF"
select count(*) from records;
.quit
EOF

话虽如此,这对我有用:

$ sqlite3 --version
3.8.7.1 2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221
$ sqlite3 tests/suites/cite/data/records.db "delete from records"