command-line - 以艰难的方式学习 SQL - 在 SQLite 3 中使用 .db 创建 .sql - 为什么以及如何?

标签 command-line sqlite

作为一个有超过 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/

相关文章:

java - 是否可以记录 jvm 的调用方式(包括所有 -D -Xmx 等)

java - 如果使用 sqlite 存在,如何删除项目?

php - Symfony:DQL在日期之间选择

python-2.7 - 如何手动导入flask-whooshalchemy索引数据?

iphone - 如何从iPhone sqlite数据库获取int数据

eclipsec.exe 选项/命令行用法?

command-line - 如何从命令行推送 DLNA 内容

javascript - 如何读取用户输入的 Node.js - 使用 Promises 重构

shell - 具有历史记录的 zsh 绑定(bind) key

python - 如何根据多个分数的平均值打印表格(SQLite,Python)