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

Database 如何在Mac终端窗口中将sql文件读入sqlite命令,database,macos,sqlite,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" 或的行为就好像它执行时没有错误,但没有记录添加到表中 我知道 这可以

我试图指向路径下的文件。 我的
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> 
使用
.read
命令有什么困难吗?

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

-- file: test2.sql
create table setting (id integer primary key, status text);
insert into setting values (1, 'new');
其次,当数据库和文件“test2.sql”位于同一目录中时,您可以
。仅使用文件名读取文件。当文件名中有空格时,文件名周围的双引号可以避免错误

$ 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       
$ 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       
使用完整路径应该始终有效。如果文件名中可能有空格,也可以使用双引号引用完整路径。字符串
users/name/test2.sql
不是完整路径。完整路径始终以
/
开头。(POSIX路径中的目录分隔符是
/
;HFS路径中的分隔符是
)您还应该知道,一些(大多数?)文件系统区分大小写:
/users/name/test2.sql
/users/name/test2.sql
是两个不同的东西

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

$ 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       
$ 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       

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

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

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

我也有同样的问题,发现由于windows隐藏文件扩展名(新计算机),我将文件命名为test.sql.sql。我将该文件重命名为test.sql,它成功了

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

  • 在命令行上检查sqlite工作目录类型.shell pwd

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

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


您是否尝试过使用像/Users/name/test2.sql这样的绝对路径?没有。读取您的意思吗?抱歉,没有。完整的命令是:
。读取/Users/name/test2.sql
尝试
从设置中选择*而不是
从问题中选择*我也试过了。阅读/Users/name/test2.sql,它不起作用。谢谢你的回答。我又试了一次。我创建了一个.sql文件,该文件在我的主目录(name)中的test3.sql中包含表创建和插入语句。然后,我尝试.read“test2.sql”,但很快得到:无法打开test3.sqlCheck文件权限
ls-l test*.sql
尝试读取您没有读取权限的文件将返回“无法打开文件名”。贾丽已经添加了相同的答案。请在您的答案中添加新内容。我不同意,我的答案与目录或完整路径无关。我的答案与隐藏扩展加倍有关。