Bueno, una hora después de publicar mi pregunta, ya lo descubrí. Tal vez debería haber investigado un poco más antes de publicar.
El problema es que sqlalchemy debe configurarse para usar la codificación utf-8. La solución en el código anterior sería cambiar la línea 3 a:
engine = create_engine('mysql://root:@localhost/testdb?charset=utf8', encoding = 'utf-8')