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

tweet

India tech friends: I just bought my ticket to IndiaFOSS in BLR Sept 26-27: https://fossunited.org/indiafoss/2026 Want to meet? Email me: https://sive.rs/contact

via Derek Sivers June 12, 2026

Claude Fable is relentlessly proactive

After two days of experience with Claude Fable 5 I think the best way to describe it is relentlessly proactive. It knows a whole lot of tricks and it will deploy pretty much any of them to get to its goal. I'll illustrate this with an example. I was hackin...

via Simon Willison's Weblog: Entries June 11, 2026

“Must hate yourself to submit”

I linked to a bunch of speedrunning videos before, but this 43-minute video by hbomberguy from 2018 is a good introduction to the whole concept and why people care: It’s really funny, romantic (maybe a bit too romantic), and it has a few great examples and...

via Unsung June 11, 2026

Generated by openring