猿问
下载APP

如何转储某些SQLite3表的数据?

如何转储数据,只转储数据库的某些SQLite3表(不是所有表)的数据,而不是模式?转储应该是SQL格式的,因为它应该稍后可以很容易地重新输入到数据库中,并且应该从命令行完成。就像是


sqlite3 db .dump

但是没有转储模式并选择要转储的表。


慕的地8271018
浏览 49回答 3
3回答

慕容708150

你没有说你想对转储文件做什么。我会使用以下内容来获取CSV文件,我可以将其导入几乎所有内容.mode csv&nbsp;-- use '.separator SOME_STRING' for something other than a comma..headers on&nbsp;.out file.csv&nbsp;select * from MyTable;如果要重新插入另一个SQLite数据库,则:.mode insert <target_table_name>.out file.sql&nbsp;select * from MyTable;

慕仰8121524

你可以通过.schema和.dump命令来区分它们。例如用grep:sqlite3 some.db .schema > schema.sqlsqlite3 some.db .dump > dump.sqlgrep -vx -f schema.sql dump.sql > data.sqldata.sql 文件将只包含没有架构的数据,如下所示:BEGIN TRANSACTION;INSERT INTO "table1" VALUES ...;...INSERT INTO "table2" VALUES ...;...COMMIT;

慕田峪7331174

任何建议使用grep排除CREATE行或只是INSERT从sqlite3 $DB .dump输出中获取行的答案都会失败。这些CREATE TABLE命令每行列出一列(因此排除CREATE不会得到所有这些),并且INSERT行上的值可以嵌入换行符(因此您不能只抓取INSERT行)。for t in $(sqlite3 $DB .tables); do&nbsp; &nbsp; echo -e ".mode insert $t\nselect * from $t;"done | sqlite3 $DB > backup.sql测试了sqlite3版本3.6.20。如果要排除某些表,可以使用它们进行过滤$(sqlite $DB .tables | grep -v -e one -e two -e three),或者如果要获取特定的子集,请将其替换为one two three。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答