J'ai enfin trouvé la réponse en découvrant qu'un script différent que j'avais exécuté plusieurs fois avec succès ne fonctionnait plus.
J'avais changé le classement dans ma base de données de utf8_general_ci à utf8_bin. Il y a un bogue dans MySQLdb 1.2.3 qui fait que les chaînes utf8_bin ne sont pas reconnues comme du texte, donc la conversion unicode ne se produit pas. Cela a été corrigé dans MySQLdb 1.2.4.
https://sourceforge.net/p/mysql-python/bugs/289/