Python Script for migrating from Wordpress to Hugo

| blogging | python | snippets |

Here’s a simple script that I wrote in python for helping to migrate from a wordpress blog to a static hugo site.

from dataclasses import dataclass
from datetime import datetime

import mysql.connector
from jinja2 import Template
from slugify import slugify


@dataclass 
class Post:
    date:datetime
    title:str
    content:str
    filename:str

posts = []

try:

    conn = mysql.connector.connect(
        host='localhost',
        port=3306,
        database='wordpress',
        user='wp_admin',
        password='$YOUR_DB_PASSWORD'
    )

    cursor = conn.cursor()

    query = """
    select post_date, post_title, post_content from $YOUR_POSTS_TABLE 
    where post_type = 'post' 
    order by post_date
    """
    cursor.execute(query)

    rows = cursor.fetchall()

    for row in rows:
        posts.append(Post(row[0], row[1], row[2], slugify(row[1])))

    template = Template("""+++
title = "{{title}}"
date = {{date}}
draft = false
tags = ['']
+++
                    
{{content}}
    """)

    for post in posts:
        path = f"import/{post.date.year}-{post.filename}.md"
        with open(path, "w") as f:
            f.write(
                template.render(
                    title=post.title,
                    date=post.date.strftime('%Y-%m-%dT%H:%M:%S%z'),
                    content=post.content
                )
            )

    print([post.filename for post in posts])

except mysql.connector.Error as e:
    print(e)

finally:
    cursor.close()
    conn.close()

Thank you for reading! Share your thoughts with me on bluesky, mastodon, or via email.

Check out some more stuff to read down below.

Most popular posts this month

Recent Favorite Blog Posts

This is a collection of the last 8 posts that I bookmarked.

Articles from blogs I follow around the net

Issue 111 – Back the winners

A Trump crypto adviser’s firm took millions from Tether while he shaped stablecoin rules in their favor, a Senate probe targets Commerce Secretary Lutnick’s not-so-former firm, and crypto’s biggest super PAC plays it safe

via Citation Needed October 16, 2026

Pluralistic: Load-bearing (16 Oct 2026)

Today's links Load-bearing: Digital sovereignty vs AI. Hey look at this: Delights to delectate. Object permanence: Anthrax penmanship; Stolen WEBGEEK license plate; Arizona Republic endorses Clinton, gets death threats; Against the great forces of history....

via Pluralistic: Daily links from Cory Doctorow October 16, 2026

Abracadabra proposes winding down after string of hacks years ago left each $1 "stablecoin" token backed by $0.04 in reserves

Abracadabra, the defi project behind the Magic Internet Money (MIM) stablecoin, is shutting down. It blamed its string of hacks: $6.5 million theft in January 2024, $13 million in March 2025, and $1.8 million in October 2025, which altogether left about $2...

via Web3 is Going Just Great October 16, 2026

Generated by openring