У меня есть скрипт, который анализирует данные из txt-файла (я думаю, его utf8), а затем он должен написать его в mysql. Когда я сделать что-то вроде этого:Напишите кириллические буквы в mysql с python
cur.execute("insert into keywords (keyword) values ('%s')" % (u'RUSSIAN TEXT HERE'))
это делать работу хорошо (у меня есть русская строка в моей MySQLdb), но когда я
f = open('/Users/aaaa/Desktop/keywords.txt', 'rw+')
for x in range (14028):
a = f.readline(x)
cur.execute("insert into keywords (keyword) values ('%s')" % (a))
#or that
cur.execute("insert into keywords (keyword) values ('%s')" % (unicode(a)))
тогда я получаю эту
'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
У меня это в моей mysql
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/local/mysql-5.6.20-osx10.8-x86_64/share/charsets/
Иногда я писал символы в базу данных, но русские символы были похожи на квадраты и прочее.
Что мне делать?
Кроме того, я получаю это после того, как предст (а)
''
'0'
'5 '
'ru '
'\xd0\xbc\xd0\xb0'
'\xd1\x85\xd0\xb0\xd1'
Traceback (most recent call last):
НИКОГДА не используйте '%' оператор параметризовать запросы SQL. При правильном использовании '% s' вам необходимо передать фактический кортеж данных в качестве другого аргумента в' cur.execute() '- в противном случае вы выполняете строчную интерполяцию, которая оставляет вас открытой для SQL-инъекции. – ThiefMaster
ОК спасибо. Но что мне делать, чтобы записать данные в mysql? – alex
'print repr (a)' и опубликуйте, что это такое, когда вы разбились –