如何在Mac终端窗口中将sql文件读入sqlite命令

时间:2015-01-15 12:28:38

标签: database macos sqlite

我试图指向一个路径下的文件。 我的test2.sql看起来像这样:

create table setting (id integer primary key, status text)
insert into setting values (1, 'new')

当我输入此命令时:

sqlite> .read users/name/test2.sql

我收到此错误:

Error: cannot open "test2.sql"

或表现得好像没有错误地执行但没有记录添加到表中。

我做

sqlite> select * from setting;

可以追溯到:

sqlite> 

使用.read命令是否有任何问题?

5 个答案:

答案 0 :(得分:1)

首先,每个SQL语句必须以分号结束。

-- file: test2.sql
create table setting (id integer primary key, status text);
insert into setting values (1, 'new');

二,当数据库和文件" test2.sql"在同一目录中,您只能使用文件名.read文件。当文件名中有空格时,文件名周围的双引号可以避免错误。

$ sqlite3 test.db
SQLite version 3.8.7.2 2014-11-18 20:57:56
Enter ".help" for usage hints.
sqlite> .read "test2.sql"

sqlite> .headers on
sqlite> .mode columns
sqlite> select * from setting;
id          status    
----------  ----------
1           new       

使用完整路径应始终有效。如果文件名中可能有空格,也可以双引号完整路径。字符串users/name/test2.sql不是完整路径。完整路径始终以/开头。 (POSIX路径中的目录分隔符为/;在HFS路径中,分隔符为:。)您还应该知道某些(大多数?)文件系统区分大小写:/users/name/test2.sql/Users/name/test2.sql是两件不同的事情。

您还可以使用命令行重定向来读取文件。同样,如果数据库和SQL文件位于同一目录中,则只需使用文件名。

$ rm test.db
$ sqlite3 test.db < "test2.sql"
$ sqlite3 test.db
SQLite version 3.8.7.2 2014-11-18 20:57:56
Enter ".help" for usage hints.
sqlite> .headers on
sqlite> .mode columns
sqlite> select * from setting;
id          status    
----------  ----------
1           new       

最后,检查SQL文件的权限。

$ ls -l "test2.sql"
-rw-rw-r-- 1 mike mike 118 Jan 15 09:28 test2.sql

如果您对该文件没有读取权限,则无法打开该文件。

答案 1 :(得分:1)

使用.read执行我的.sql文件时遇到了同样的问题,即使我将.sql文件放在与SQLite可执行文件相同的目录中。使用.sql文件的完整路径修复了问题。

答案 2 :(得分:1)

也许是因为即使将sqlite3.exe文件与SQL文件放在同一文件夹中,sqlite的工作目录和SQL文件也不相同。

  • 要检查sqlite工作目录,请在命令行中键入.shell pwd

  • 然后,如果要将sqlite工作目录更改为SQL文件,则可以键入:.cd full-path_SQL_files

  • 下次您不再需要在命令行中输入SQL文件的完整路径

答案 3 :(得分:0)

如果您在Windows中工作,则文件名可能有问题。 Windows默认隐藏扩展名。你所看到的“FN”可能真的是“FN.txt”

答案 4 :(得分:0)

我遇到了同样的问题,发现由于Windows隐藏了文件扩展名(新计算机),我将文件命名为test.sql.sql。我将该文件重命名为test.sql并且有效。