如何转储某些SQLite3表的数据?
时间:2020-03-05 18:56:50 来源:igfitidea点击:
如何转储数据库的某些SQLite3表(不是所有表)的数据,而仅转储数据,而不是模式?
转储应采用SQL格式,因为以后应轻松将其重新输入数据库并应从命令行完成。就像是
sqlite3 db .dump
但不转储架构并选择要转储的表。
解决方案
回答
我们可以在表格上进行选择,在每个字段后插入逗号以产生csv,或者使用GUI工具返回所有数据并将其保存到csv。
回答
最好的方法是采用sqlite3 db dump可以执行的代码,不包括模式部分。
伪代码示例:
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)
我们甚至可以只使用该shell并注释掉架构部分并使用它。
回答
我们没有说要对转储的文件做什么。
我将使用以下内容获取CSV文件,该文件可以导入几乎所有内容
.mode csv -- use '.separator SOME_STRING' for something other than a comma. .headers on .out file.dmp select * from MyTable;
如果我们想重新插入另一个SQLite数据库,则:
.mode insert <target_table_name> .out file.sql select * from MyTable;
回答
这不是最好的方法,但至少不需要外部工具(grep除外,反正这在* nix盒上是标准的)
sqlite3 database.db3 .dump | grep '^INSERT INTO "tablename"'
但是我们确实需要对要查找的每个表执行此命令。
请注意,这不包括架构。
回答
我们可以为.dump特殊命令指定一个或者多个表参数,例如sqlite3 db" .dump'table1''table2'"`。