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

6

我想指向一个路径下的文件。我的 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命令有什么需要注意的地方吗?


你尝试过使用绝对路径,例如 /Users/name/test2.sql 吗? - Tom
没有使用.read,你是这个意思吗? - user3126427
我也尝试过读取 /Users/name/test2.sql,但它没有起作用。 - user3126427
尝试在 create table (...);insert into (...); 后面加上分号。 - Mark Setchell
对不起,我的意思是选择所有设置数据:select * from setting; - user3126427
显示剩余3条评论
5个回答

6

首先,每个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

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


谢谢你的回答。我又试了一次。我在我的主目录(名称)中创建了一个包含表创建和插入语句的.sql文件,名为test3.sql。 然后我尝试使用.read "test2.sql",但很快就出现了错误:无法打开test3.sql。 - user3126427
检查文件权限。ls -l test*.sql 试图读取您没有读取权限的文件将返回“无法打开文件名”。 - Mike Sherrill 'Cat Recall'

2
也许是因为SQLite的工作目录和SQL文件不同,即使您将sqlite3.exe文件放在与SQL文件相同的文件夹中。
要检查SQLite的工作目录,请在命令行上键入.shell pwd。
然后,如果您想将SQLite的工作目录更改为SQL文件夹,则可以键入:.cd full-path_SQL_files。
下次您就不需要再将SQL文件的完整路径输入到命令行中了。

1
我曾经遇到过同样的问题,使用.read执行我的.sql文件时,尽管我将.sql文件放在与SQLite可执行文件相同的目录中。使用完整路径的.sql文件解决了这个问题。

0

如果您正在Windows中工作,文件名可能会出现问题。 Windows默认隐藏扩展名。 您看到的“FN”实际上可能是“FN.txt”


0

我遇到了同样的问题,发现由于Windows隐藏文件扩展名(新电脑),我命名了文件为test.sql.sql。 我将文件重命名为test.sql后,问题得到解决。


同样的答案已经被Jia LI添加了,请在你的回答中添加一些新的内容。 - A J
我不同意,我的答案与目录或完整路径无关。我的答案与隐藏扩展名重复有关。 - Lachlan Pembroke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接