我正在尝试从 OS X 中的命令行仅将
test.db
的模式(即没有数据)转储到名为 schema.sql
的文件中,而不启动 sqlite3。
我知道我能做到:
sqlite3
.open test.db
.output schema.sql
.schema
.quit
但我不想启动 sqlite 3。这...
echo '.output schema.sql' | sqlite3 test.db
创建空文件,但这...
echo '.schema' | sqlite3 test.db
仅打印架构。如何从终端将其写入该文件?
谢谢!
shell允许重定向,
sqlite3
可以获取命令作为参数:
sqlite3 test.db .schema > schema.sql
想通了!我只需要转义
echo
语句中的文本:
echo -e '.output schema.sql\n.schema' | sqlite3 test.db
仅供参考,你也可以这样做
( echo .output schema.sql ; echo .schema ) | sqlite3 test.db
这是在子 shell 中运行两个 echo 命令并通过管道传输其输出。
或者
sqlite3 test.db <<EOF
.output schema.sql
.schema
EOF
请参阅 “cat << EOF" work in bash?”如何了解它的作用。
例如,您可以使用
apple.db
仅将 backup.sql
的架构导出到 .schema
,如下所示。 *我的回答解释更多:
sqlite3 apple.db .schema > backup.sql
并且,您可以使用以下命令仅将
apple.db
的架构导出到 backup.sql
。 *.output
根据文件存在创建并选择或仅选择文件,并且您必须退出才能关闭文件(例如,.exit
或.quit
),否则SQLite命令的结果将输出到文件中:
sqlite3 apple.db
sqlite> .output backup.sql
sqlite> .schema
sqlite> .exit
并且,您可以使用以下命令仅将
apple.db
中特定表的架构导出到 backup.sql
。 *.schema
仅导出一个特定表的架构,因此如果您想导出特定多个表的架构,应多次运行.schema
:
sqlite3 apple.db
sqlite> .output backup.sql
sqlite> .schema person
sqlite> .schema animal
sqlite> .exit