作为一个有超过 20 小时的 Python 编码和对命令行的新手熟悉的初级程序员,我打开了 Zed Shaw 的“艰难地学习 SQL”并很快被难住了。
在exercise 01 ,Zed 让您使用第一个命令创建您的第一个表:
sqlite3 ex1.db < ex1.sql
然而,这无法在我的命令行中运行,给出错误消息,“-bash: ex1.sql: 没有这样的文件或目录。”最初,我忽略了这个推荐的代码并继续:
sqlite3 ex1.db
SQLite version 3.7.15.1 2012-12-19 20:39:10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE person (
...> id INTEGER PRIMARY KEY,
...> first_name TEXT,
...> last_name TEXT,
...> age INTEGER
...> );
在命令行中运行“ls -l”显示:
-rw-r--r-- 1 thefifth staff 2048 Feb 15 15:23 ex1.db
但我想要但未能得到的是:
$ ls -l
-rw-r--r-- 1 zedshaw staff 2048 Nov 8 16:18 ex1.db
-rw-r--r-- 1 zedshaw staff 92 Nov 8 16:14 ex1.sql
我用 Google 搜索并找到了 this blog它实现了相同的“name.db < name.sql”语法,但遵循此处的代码对我也不起作用。这Stack Overflow也有类似的语法,但在将 .sql 转换为 sqlite3 的上下文中。
具体来说,我想知道这是否是在 native bash 终端中使用的“<”,并且我无法满足正确使用它的某些标准。另外,我不知道创建 .sql 和 .db 文件的目的,尽管显然一个文件比另一个小得多。也许我没有正确安装 sqlite3,但它似乎工作正常。
感谢您的帮助!
最佳答案
sqlite3 ex1.db < ex1.sql
要使上述工作正常,ex1.sql
应该已经存在了。 <
是 shell 中用于输入重定向的字符。 sqlite3
在这里使用新的或现有的数据库启动(它将根据需要创建数据库),并从 ex1.sql
获取 SQL 语句,执行它们并修改 ex1.db
相应地。
现在让我们生成ex1.sql
来自 ex1.db
,你显然想这样做:
sqlite3 ex1.db .dump > ex1.sql
我们再次使用 shell 重定向功能,现在将输出 重定向到 ex1.sql
. .dump
命令使sqlite
写出在空数据库中执行时将重新创建类似数据库的 SQL 语句:重新创建表并填充 INSERT
等
现在您可以转到第 1 步:
sqlite3 ex1copy.db < ex1.sql
关于command-line - 以艰难的方式学习 SQL - 在 SQLite 3 中使用 .db 创建 .sql - 为什么以及如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14903220/