database - 如何在 Mac 终端窗口中将 sql 文件读入 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"

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

我愿意

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

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

关于database - 如何在 Mac 终端窗口中将 sql 文件读入 sqlite 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27963480/

相关文章:

javascript - WebSQL | SQLite - 将 "?"字符插入数据库

python - sqlite3.操作错误: table book has 6 columns but 5 values were supplied

database - 3NF 和关系和函数依赖的无损分解

sql - 这个地址数据库有多糟糕?

mysql - 删除加入中不存在的记录

swift - alamofire swift : Can't download image to location specified by user

java - 数据未插入 SQLite 数据库

php - 归一化表

c - while 循环中 "fgets"的意外行为

swift - 从 RxSwift 订阅中更新菜单