如何转储数据库的一些SQLite3表(而不是所有表)的数据,并且只转储数据,而不转储模式? 转储应该是SQL格式的,因为它以后可以很容易地重新输入到数据库中,并且应该从命令行完成。类似的
sqlite3 db .dump
但是没有转储模式和选择要转储的表。
如何转储数据库的一些SQLite3表(而不是所有表)的数据,并且只转储数据,而不转储模式? 转储应该是SQL格式的,因为它以后可以很容易地重新输入到数据库中,并且应该从命令行完成。类似的
sqlite3 db .dump
但是没有转储模式和选择要转储的表。
当前回答
作为对Paul Egan的回答的改进,这可以实现如下:
sqlite3 database.db3 '.dump "table1" "table2"' | grep '^INSERT'
——或
sqlite3 database.db3 '.dump "table1" "table2"' | grep -v '^CREATE'
当然,需要注意的是必须安装grep。
其他回答
你可以获取.schema和.dump命令的不同。例如,使用grep:
sqlite3 some.db .schema > schema.sql
sqlite3 some.db .dump > dump.sql
grep -vx -f schema.sql dump.sql > data.sql
数据。SQL文件将只包含没有模式的数据,就像这样:
BEGIN TRANSACTION;
INSERT INTO "table1" VALUES ...;
...
INSERT INTO "table2" VALUES ...;
...
COMMIT;
您可以对表进行选择,在每个字段后插入逗号以生成csv,或者使用GUI工具返回所有数据并将其保存为csv。
最好的方法是采用sqlite3 db转储所做的代码,不包括模式部分。
示例伪代码:
SELECT 'INSERT INTO ' || tableName || ' VALUES( ' ||
{for each value} ' quote(' || value || ')' (+ commas until final)
|| ')' FROM 'tableName' ORDER BY rowid DESC
有关实际代码,请参阅:src/shell.c:838(用于sqlite-3.5.9)
您甚至可以取下外壳并注释掉模式部分并使用它。
您可以为.dump特殊命令指定一个或多个表参数,例如sqlite3 db "。Dump 'table1' 'table2' '”。
不是最好的方法,但至少不需要外部工具(除了grep,它是*nix盒子上的标准)
sqlite3 database.db3 .dump | grep '^INSERT INTO "tablename"'
但是您确实需要为您正在寻找的每个表执行这个命令。
注意,这不包括模式。