我用的dialect是pymysql,先看了一下pymysql,发现果然在这一层就已经出问题了

如果用纯pymysql的话,在连接数据库的时候要加上charset=\'utf8\'

conn = pymysql.connect(host=\'localhost\', user=\'root\', db=\'db\', charset=\'utf8\')

然后在sqlalchemy这一层的做法是在dsn字符串后面加上?charset=utf8

engine = create_engine(\'mysql+pymysql://%s:%s@%s/%s?charset=utf8\' % (
        user, passwd, host, database), echo=True)

参考http://firefish.blog.51cto.com/298258/112794
感谢