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

use*_*427 6 database sqlite macos

我试图指向路径下的文件。我的test2.sql样子是这样的:

create table setting (id integer primary key, status text)
insert into setting values (1, 'new')
Run Code Online (Sandbox Code Playgroud)

当我输入这个命令时:

sqlite> .read users/name/test2.sql
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Error: cannot open "test2.sql"
Run Code Online (Sandbox Code Playgroud)

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

我愿意

sqlite> select * from setting;
Run Code Online (Sandbox Code Playgroud)

这可以追溯到:

sqlite> 
Run Code Online (Sandbox Code Playgroud)

使用该.read命令有任何问题吗?

Mik*_*ll' 6

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

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

其次,当数据库和文件“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       
Run Code Online (Sandbox Code Playgroud)

使用完整路径应该始终有效。如果文件名中可能有空格,也用双引号引起来完整路径。该字符串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       
Run Code Online (Sandbox Code Playgroud)

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

$ ls -l "test2.sql"
-rw-rw-r-- 1 mike mike 118 Jan 15 09:28 test2.sql
Run Code Online (Sandbox Code Playgroud)

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