SQLite:从命令行仅将模式转储到 .sql 文件中

问题描述 投票:0回答:4

我正在尝试从 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

仅打印架构。如何从终端将其写入该文件?

谢谢!

sql database macos sqlite terminal
4个回答
61
投票

shell允许重定向,

sqlite3
可以获取命令作为参数:

sqlite3 test.db .schema > schema.sql

5
投票

想通了!我只需要转义

echo
语句中的文本:

echo -e '.output schema.sql\n.schema' | sqlite3 test.db

2
投票

仅供参考,你也可以这样做

( 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?”如何了解它的作用。


0
投票

例如,您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.