mweb:合并两个文档库的方法
本文简单介绍一下 合并两个mweb文档库的方法。
0x01 背景
mweb文档库是 mweb用来管理多个markdown的。
原理是 将管理markdown的元数据信息(article的元数据信息,category的元数据信息)存在sqlite数据库中(即:mainlib.db)。
mweb文档库设置后,目录结构如下:
├── docs
│ ├── xxx.md # markdown 源文件
│ └── media # 图片等信息
├── mainlib.db # sqlite数据库
└── metadata # 发布时用到的文件夹
通过sqlite3查看sqlite数据中的表很简单:(字段参考补充信息)
sqlite> .tables
article cat cat_article tag tag_article
我们的目标是将文档库2中的数据 合并到 文档库1中,因此简化为:
- 复制表信息:将文档库2中的 表中的信息 insert到文档库1中的 表中。
- 复制数据。
0x02 步骤
1、创建category:“导入-新”。
在文档库1中创建一个新的category,例如导入。(防止insert时改变文档库1中原始catetory的sort顺序)
# 创建后,效果如下,记住这个category的id为16134842697556
88|0|16134842697556|导入-新||12|87|0|||0|||||0|0||||||||||0|0
2、insert category结构。
复制文档库2的category sql语句(通过navicat可以实现),insert到文档库1的sqlite db中。
注意:需要替换文档库2 cat表中 pid为0的数据,让其pid为刚创建的category的pid:16134842697556。例如:
# 替换前
INSERT INTO "cat" VALUES (25, 0, 16129449644395, 'Security', '', 12, 81, 0, '', '', 0, '', '', '', '', 0, 0, '', '', '', '', '', '', '', '', '', 0, 0);
# 替换后
INSERT INTO "cat" VALUES (89, 16134842697556, 16129449644395, 'Security', '', 12, 81, 0, '', '', 0, '', '', '', '', 0, 0, '', '', '', '', '', '', '', '', '', 0, 0);
insert pid为0的数据之后,再insert pid不为0的数据。
insert之后,重新载入文档库,就可以发现文档库1中的 分类 已经更新了。
3、导入article。
由于文档库2中的id和文档库1中的id不同,需要当id自增,一个sql demo如下:
INSERT INTO "article"(uuid, type, state, sort, dateAdd, dateModif, dateArt, docName, otherMedia, buildResource, postExtValue) VALUES (15941875466662, 0, 1, 15941875466662, 1594187546, 1594388338, 1594187546, '', '', '', '');
4、导入cat_article。
INSERT INTO "cat_article"(rid, aid) VALUES (15961005158239, 15961005194269);
5、复制md和media信息。
文档库2中的docs下的media 和md文件到 文档库1中,重新载入文档库1 即可。
0x03 效果
0x04 参考
1、https://zh.mweb.im/mweb-library.html
2、https://blog.csdn.net/why10260922/article/details/80332786
补充
1)创建insert SQL时,可能用到的正则如下。
" VALUES .*?,
"(uuid, type, state, sort, dateAdd, dateModif, dateArt, docName, otherMedia, buildResource, postExtValue) VALUES (
"(rid, aid) VALUES (
2)表结构
sqlite> .tables
article cat cat_article tag tag_article
sqlite> .schema article
CREATE TABLE article(
id INTEGER primary key autoincrement
uuid INTEGER
type INTEGER
state INTEGER
sort INTEGER
dateAdd INTEGER
dateModif INTEGER
dateArt INTEGER
docName TEXT,
otherMedia TEXT
buildResource TEXT
postExtValue TEXT);
CREATE UNIQUE INDEX article_uuid_idx ON article (uuid);
sqlite> .schema cat
CREATE TABLE cat(
id INTEGER primary key autoincrement
pid INTEGER
uuid INTEGER
name TEXT
docName TEXT
catType INTEGER
sort INTEGER
sortType INTEGER
siteURL TEXT
siteSkinName TEXT
siteLastBuildDate INTEGER
siteBuildPath TEXT
siteFavicon TEXT
siteLogo TEXT
siteDateFormat TEXT
sitePageSize INTEGER
siteListTextNum INTEGER
siteName TEXT
siteDes TEXT
siteShareCode TEXT
siteHeader TEXT
siteOther TEXT
siteMainMenuData TEXT
siteExtDef TEXT
siteExtValue TEXT
sitePostExtDef TEXT
siteEnableLaTeX INTEGER
siteEnableChart INTEGER);
CREATE UNIQUE INDEX cat_uuid_idx ON cat (uuid);
sqlite> .schema cat_article
CREATE TABLE cat_article(
id INTEGER primary key autoincrement
rid INTEGER
aid INTEGER);
sqlite> .schema tag
CREATE TABLE tag(
id INTEGER primary key autoincrement
name TEXT);
sqlite> .schema tag_article
CREATE TABLE tag_article(
id INTEGER primary key autoincrement
rid INTEGER
aid INTEGER);