我是sqlite3的新手,但我已经开始了解它。我正在创建一个简单的基于命令行的工具来从数据库中删除条目。我使用的命令在交互模式下工作正常。它看起来像这样:
sqlite3 db.sqlite
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";
MacBook01
但是当我尝试将它放在shell命令中时,它不起作用:
$ sqlite3 db.sqlite "SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";"
Error: no such column: C02JT0XXXXXX
奇怪的是当我使用不同的论点时,DOES工作:
$ sqlite3 db.sqlite "SELECT computer_name FROM machine WHERE id = "1";"
MacBook01
如果第二个参数长于1个字符,则表示失败。我也尝试了其他几个,他们给了我同样的错误。
我做错了什么?
谢谢!
答案 0 :(得分:2)
在bash中,您的第一个表达式变为SELECT computer_name FROM machine WHERE serial_number = C02JT0XXXXXX;
- 有效地删除了引号。 id = 1
这是可以的,因为这是一个数字比较。对于字符串"C02JT0XXXXXX"
,它会导致问题。试试单引号:
sqlite3 db.sqlite 'SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";'
答案 1 :(得分:1)
您已经在使用这些报价。
sqlite3 db.sqlite 'SELECT computer_name FROM machine WHERE serial_number = "C02JT0XXXXXX";'
sqlite3 db.sqlite 'SELECT computer_name FROM machine WHERE serial_number = "'"C02JT0XXXXXX"'";'