wordpress后臺(tái)數(shù)據(jù)庫(kù)簡(jiǎn)單分析

只是簡(jiǎn)答的分析,路過(guò)大神勿噴。

說(shuō)實(shí)話,php能看懂,寫(xiě)的話就再需要熟悉一下語(yǔ)法。python建站需要從頭開(kāi)始。包括模板、cms、都沒(méi)有php下的wordpress多。插件上也是wordpress有絕對(duì)的優(yōu)勢(shì)。自己一直寫(xiě)的python后臺(tái),前端頁(yè)面放個(gè)一兩年真是連個(gè)毛都不剩下了。仔細(xì)考慮了一些,還是決定使用wordpress搭建自己的小博客玩一玩。隨便下載了一個(gè)wordpress,本地搭建起來(lái)后,分析了一下wordpress數(shù)據(jù)庫(kù)表的關(guān)系。把幾個(gè)主要的表格梳理了一下,以下是簡(jiǎn)單的記錄。(非專業(yè)php,僅從后端角度簡(jiǎn)單分析,如有大師路過(guò),勿噴)。

目標(biāo)網(wǎng)站

本人喜歡上網(wǎng)搜集一些書(shū)籍,也喜歡讀書(shū)。就以之前看到的三人行書(shū)屋為例:三人行書(shū)屋截圖如下。

這個(gè)網(wǎng)站用插件分析了一下,用的是GIt主題。頁(yè)面的主要分析點(diǎn)截圖中標(biāo)紅框-文章目錄、文章、文章標(biāo)簽。涉及的表有:wp_terms、wp_posts、wp_term_taxonomy、wp_term_ralationships.

這幾個(gè)表的功能分別是:? ? wp_posts:文章存儲(chǔ)表。主要字段:ID-自增ID。post_title-文章的標(biāo)題。post_excerpt-文章簡(jiǎn)介

wp_terms: 標(biāo)簽、目錄的存儲(chǔ)表。term_id-自增id。name-標(biāo)簽或目錄的名稱。slug-urlencode后的內(nèi)容。

wp_term_taxonmy: 目錄、標(biāo)簽的描述信息,主要字段:term_taxonomy_id-該表的自增id,term_id-對(duì)應(yīng)上面的wp_terms的term_id,taxonomy- 目錄或者標(biāo)簽(category or post_tag),count:計(jì)數(shù)器,對(duì)應(yīng)截圖中的標(biāo)簽下的數(shù)字。

wp_term_relationships: wp_terms 和 wp_posts的關(guān)聯(lián)表。也就是說(shuō),這張表決定了一篇文章就是是什么目錄,有什么標(biāo)簽。主要字段:object_id - 對(duì)應(yīng)的是wp_posts中的ID。term_taxonomy_id對(duì)應(yīng)的是wp_term_taxonomy中的term_taxonomy_id。object_id、term_taxonomy_id 是多對(duì)多的關(guān)系。

文章分析是基于在wordpress中實(shí)際編輯文章及目錄標(biāo)簽等,然后觀察每個(gè)表格的變化,分析較為簡(jiǎn)單粗暴。但是基本上能夠作為二次開(kāi)發(fā)的基礎(chǔ)使用了。

我是怎么進(jìn)行二次開(kāi)發(fā)的

說(shuō)是二次開(kāi)發(fā),其實(shí)并沒(méi)有什么具體的目標(biāo),沒(méi)想好建立什么網(wǎng)站。就當(dāng)前期的熱身活動(dòng),熟悉和驗(yàn)證結(jié)論是否正確。我還是使用我最熟悉的python作為開(kāi)發(fā)語(yǔ)言。

找到目標(biāo)網(wǎng)站,爬取一些內(nèi)容-包括標(biāo)題,目錄分類,標(biāo)簽,作為素材

具體哪個(gè)網(wǎng)站就不透露了。大多數(shù)網(wǎng)站這都有我們所需的元素。使用python簡(jiǎn)單編寫(xiě)了scrapy爬蟲(chóng)(簡(jiǎn)單點(diǎn)的直接用requests爬了),我們需要用到的素材均作單獨(dú)字段存儲(chǔ)。

腳本批量處理文章

我推薦比較好的做法是使用sqlalchemy對(duì)源數(shù)據(jù)表和wp數(shù)據(jù)表進(jìn)行建模。然后根據(jù)wp各個(gè)表的關(guān)系做事務(wù)插入。即使用一個(gè)session對(duì)上面提到的幾個(gè)表做完整性的數(shù)據(jù)插入。

這里推薦一個(gè)快速生成數(shù)據(jù)模型的工具,配合sqlalchemy使用事半功倍。sqlacodegen

具體操作方法:

1. pip install sqlacodegen

2. sqlacodegen --outfile=models.py mysql://root:guess@192.168.1.250:3306/test

第二部操作是對(duì)整個(gè)庫(kù)的建模,當(dāng)然也可以選擇對(duì)某張表進(jìn)行建模。

sqlacodegen --outfile=models.py mysql://root:guess@192.168.1.250:3306/test --tables teacher,student

我具體的處理邏輯,部分偽代碼如下(寫(xiě)的太亂,只能拿出部分偽代碼獻(xiàn)丑了)

post=spider_session.query(SpiderData).filter(SpiderData.id==1)# 從爬蟲(chóng)庫(kù)中選出一條

...

# wordpress 數(shù)據(jù)庫(kù)插入

wp_post=WpPost()

wp_post.post_title=post.article_name

wp_post.post_content=post.content

wp_post.post_excerpt=post.short_introduction

wp_post.post_status="publish"

session_wp.add(wp_post)

session_wp.commit()

# 一下是wp_terms表,term表可以提前把標(biāo)簽和分類先做插入,這里只做查詢

terms=spider_session.query(SpiderData).filter(SpiderData.id==1).all()

# 插入wp_terms

forterminterms:

# 在wp_terms 中找到這個(gè)標(biāo)簽對(duì)應(yīng)的id。前提是你已經(jīng)插入。

term_id=session_wp.query(WpTerm).filter(WpTerm.name==term.name).first()

# 對(duì)wp_term_relationships進(jìn)行處理

object_id=wp_post.ID

wp_relationship=WpTermRelationships()

wp_relationship.object_id=object_id

wp_relationship.term_id=term_id

session_wp.add(wp_relationship)

session_wp.commit()

以上代碼只是提供思路實(shí)際應(yīng)用中注意異常處理等。

寫(xiě)這篇文章的時(shí)候距離完成我的小demo網(wǎng)站已經(jīng)有一段時(shí)間了。方向是技術(shù)博客類型。

還能想起但是第一次接觸wordpress時(shí)的一臉懵逼,沉下心研究一段時(shí)間你就會(huì)發(fā)現(xiàn),原來(lái)很多事情在你全力做了之后就會(huì)變得很簡(jiǎn)單。

以上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容