Vous ne devez pas concaténer les variables pour construire la requête, mais plutôt utiliser les espaces réservés, sinon votre code sera sensible aux attaques par injection SQL. En revanche, vous devez convertir le QPixmap, et non le texte, en octets en utilisant un QBuffer comme intermédiaire :
con = MySQLdb.connect(host="localhost", user="root", password="", database="somedb")
with con:
cur = con.cursor()
name = self.ui.name_edit.text()
buff = QBuffer()
buff.open(QIODevice.WriteOnly)
pixmap = QPixmap(self.ui.image_label.pixmap())
pixmap.save(buff, "PNG")
binary_img = buff.data().toBase64().data()
cur.execute("INSERT INTO persons(name, photo) VALUES (%s, %s)", (name, binary_img))
con.commit()