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

Qwen 3.8 27B is excellent, but it defaults to wildly overthinking things

Friday's big release was Qwen 3.8 27B, an Apache 2 licensed 27B parameter vision-capable LLM from Alibaba's Qwen research lab. I've been looking forward to this one: 27B is an excellent size for running a model on a reasonably specced laptop, and its prede...

via Simon Willison's Weblog: Entries August 16, 2026

“I think there’s a lot of value in these.”

Speaking of user interface guidelines, developer Matt Sephton and others compiled many of Apple’s human interface guidelines, starting from 1980, all the way to 2014, including some goodies like early drafts, NeXT, Newton, and so on. Elsewhere, designer Ge...

via Unsung August 16, 2026

Birding photos from Dutch Gap on Aug 15, 2026

Birding photos from Dutch Gap on Aug 15, 2026 My best bird photo from this morning is a dragonfly (Eastern Pondhawk, I think). Least Sandpiper Green Heron Red-headed Woodpecker. It's a juvenile, so its head is not actually red yet.

via O'DonnellWeb August 16, 2026

Generated by openring