6

作为一个拥有超过 20 小时 Python 编码和熟悉命令行的新手的初级程序员,我打开了 Zed Shaw 的“Learn SQL The Hard Way”,很快就被难住了。

练习 01中,Zed 让您使用以下第一个命令创建您的第一个表:

sqlite3 ex1.db < ex1.sql

但是,这无法在我的命令行中运行,并给出错误消息“-bash: ex1.sql: No such file or directory”。最初,我忽略了这个推荐的代码并继续:

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

我搜索了一下,发现这个博客实现了相同的“name.db < name.sql”语法,但是按照这里的代码对我也不起作用。这个Stack Overflow也有类似的语法,但在将 .sql 转换为 sqlite3 的上下文中。

具体来说,我想知道这是否是在本机 bash 终端中使用的“<”,并且我未能满足其正确使用的某些标准。此外,我不知道同时创建 .sql 和 .db 文件的目的,尽管显然其中一个比另一个小得多。也许我错误地安装了 sqlite3,但它似乎工作正常。

谢谢你的帮助!

4

3 回答 3

10
sqlite3 ex1.db < ex1.sql

对于上述工作,ex1.sql应该已经存在。<是在 shell 中用于输入重定向的字符。sqlite3从这里开始使用一个新的或现有的数据库(它将根据需要创建数据库),并从中获取 SQL 语句ex1.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
于 2013-02-15T21:04:52.837 回答
5
  1. 将代码保存在扩展名为 .sql 的文件中
  2. 然后在终端: sqlite3 ex1.db < ex1.sql 用于创建 ex1.db
  3. 放入终端: sqlite3 ex1.db .schema
  4. 或者说: sqlite3 ex1.db [... 然后....] .schema
于 2013-02-28T06:45:55.290 回答
2

我今天遇到了同样的问题,和你一样,我想知道为什么我的命令不起作用。如上所述,作者假设您在文本编辑器中创建初始命令并保存为 .sql 文件。然后 ex1.db < ex1.sql 命令将文件转换为 .db 文件。

于 2014-04-03T14:58:39.783 回答