如何在 Mac 终端 window 中将 sql 文件读入 sqlite 命令
how to read an sql file into sqlite command in Mac terminal window
我正在尝试指向路径下的文件。
我的 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"
or 的行为就好像它没有错误地执行但没有记录被添加到 table。
我愿意
sqlite> select * from setting;
这可以追溯到:
sqlite>
使用 .read
命令有什么问题吗?
首先,每个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
如果您没有文件的读取权限,您将无法打开它。
我在使用 .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_SQL_files
下次您不需要再在命令行中输入 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"
or 的行为就好像它没有错误地执行但没有记录被添加到 table。
我愿意
sqlite> select * from setting;
这可以追溯到:
sqlite>
使用 .read
命令有什么问题吗?
首先,每个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
如果您没有文件的读取权限,您将无法打开它。
我在使用 .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_SQL_files
下次您不需要再在命令行中输入 SQL 个文件的完整路径