Я хочу скопировать данные из одной базы данных в другую базу данных.Поэтому я написал скрипт Python для этой цели.
Имена на немецком языке, но я не думаю, что это станет проблемой для понимания моего вопроса.
Сценарий выполняет следующие действия:
db = mysql.connect(db='', charset="utf8", use_unicode=True, **v.MySQLServer[server]);
...
cursor = db.cursor();
cursor.execute('select * from %s.%s where %s = %d;' % (eingangsDatenbankName, tabelle, syncFeldname, v.NEU))
daten = cursor.fetchall()
for zeile in daten:
sql = 'select * from %s.%s where ' % (hauptdatenbankName, tabelle)
...
for i in xrange(len(spalten)):
sql += " %s, " % db_util.formatierFeld(unicode(str(zeile[i]), "utf-8"), feldTypen[i])
Метод "db_util.formatierFeld "выглядит так
def formatierFeld(inhalt, feldTyp):
if inhalt.lower() == "none":
return "NULL" #Stringtypen
if "char" in feldTyp.lower() or "text" in feldTyp.lower() or "blob" in feldTyp.lower() or "date".lower() in feldTyp.lower() or "time" in feldTyp.lower():
return '"%s"' % inhalt
else:
return '%s' % inhalt
Ну, некоторым из вас это покажется довольно странным, но я могу заверить вас, я ДОЛЖЕН сделать это таким образом, поэтому, пожалуйста, нетобсуждение стиля и т. д.
Хорошо, при запуске этого кода я получаю следующее сообщение об ошибке, когда сталкиваюсь со словами с умляутами.
Traceback (most recent call last):
File "db_import.py", line 222, in <module>
main()
File "db_import.py", line 219, in main
importieren(server, lokaleMaschine, dbEingang, dbHaupt)
File "db_import.py", line 145, in importieren
sql += " %s, " % db_util.formatierFeld(unicode(str(zeile[i]), "utf-8"), feldTypen[i])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 1: ordinal not in range(128)
На самом деле я не понимаю, почему эта строка может 'не может быть построено таким образом.По моему мнению, это должно сработать, поскольку я явно говорю программе использовать здесь Unicode.
У кого-нибудь есть догадки, что здесь не так?