以前记录内容的时候,往往忘记了在行内代码的两头加上空格,显得很混乱,忍了很久实在看不下去,这次把它处理了,由于使用了 markdown
插件,需要处理 wp_posts
表的两个字段 post_content
和 post_content_filtered
。
其中字段 post_content
是存储最终渲染到前端的 html
内容,而字段 post_content_filtered
存储的是 markdown
原始文本,下面分两个脚本分别处理他们。
处理字段 post_content
思路是需要将字段 post_content
中的 <code>
标签内的内容匹配处理,然后在两端加入空格,然后更新字段即可,需要注意的是:
1. 避免重复替换;
2. 避免两端已经存在空格的被再次替换;
3. 需要排除代码块也就是 <pre>
标签中的 <code>
;
以下是处理代码:
友情提示:使用脚本前,请一定备份数据库
import re
import mysql.connector
# 连接到MySQL数据库
# 请替换以下参数为你的数据库连接信息
config = {
'user': 'username',
'password': 'password',
'host': 'localhost',
'database': '数据库',
'raise_on_warnings': True
}
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
# 正则表达式匹配不包含在<pre>标签内的<code>标签及两端的空格
pattern = re.compile(r'(?<!<pre>)([ ]*<code>[^<]+</code>[ ]*)')
def replace_func(post_content):
matchs = pattern.findall(post_content)
done = []
for match in matchs:
if match not in done and not (match.startswith(' ') or match.endswith(' ')):
print(match, '======')
done.append(match)
post_content = post_content.replace(match, ' ' + match + ' ')
return post_content
# 执行查询,获取需要更新的记录
cursor.execute("SELECT ID, post_content FROM wp_posts WHERE post_content REGEXP '<code>([^<]+)</code>'")
posts_to_update = cursor.fetchall()
# 遍历记录,执行替换操作
for post_id, post_content in posts_to_update:
print("==============================================", post_id)
new_content = replace_func(post_content)
# 更新记录
cursor.execute("UPDATE wp_posts SET post_content = %s WHERE ID = %s", (new_content, post_id))
conn.commit()
cursor.close()
conn.close()
处理字段 post_content_filtered
行内代码存在于反引号 "`" 中,用正则匹配出来,跟上面的逻辑差不多,代码如下:
友情提示:使用脚本前,请一定备份数据库
import re
import mysql.connector
# 连接到MySQL数据库
# 请替换以下参数为你的数据库连接信息
config = {
'user': 'username',
'password': 'password',
'host': 'localhost',
'database': '数据库',
'raise_on_warnings': True
}
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
# 匹配包含`及中间内容,包括两端空格
pattern = re.compile(r'[ ]*`.*?`[ ]*')
def replace_func(post_content):
matchs = pattern.findall(post_content)
done = []
for match in matchs:
if '``' not in match and match not in done and not (match.startswith(' ') or match.endswith(' ')):
print(match, '======')
done.append(match)
post_content = post_content.replace(match, ' ' + match + ' ')
return post_content
# 执行查询,获取需要更新的记录
cursor.execute("SELECT ID, post_content_filtered FROM wp_posts WHERE post_content_filtered like '%`%'")
posts_to_update = cursor.fetchall()
# 遍历记录,执行替换操作
for post_id, post_content in posts_to_update:
print("==============================================", post_id)
new_content = replace_func(post_content)
# 更新记录
cursor.execute("UPDATE wp_posts SET post_content_filtered = %s WHERE ID = %s", (new_content, post_id))
conn.commit()
cursor.close()
conn.close()