2014-10-30 3 views
0

У меня есть скрипт, который анализирует данные из 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): 
+1

НИКОГДА не используйте '%' оператор параметризовать запросы SQL. При правильном использовании '% s' вам необходимо передать фактический кортеж данных в качестве другого аргумента в' cur.execute() '- в противном случае вы выполняете строчную интерполяцию, которая оставляет вас открытой для SQL-инъекции. – ThiefMaster

+0

ОК спасибо. Но что мне делать, чтобы записать данные в mysql? – alex

+0

'print repr (a)' и опубликуйте, что это такое, когда вы разбились –

ответ

1

Try открыть файл таким образом:

f = open('/Users/aaaa/Desktop/keywords.txt', 'rw+', encoding='utf-8')

+0

f = codecs.open ('/ Пользователи/alexeypolusov/Desktop/keywords.txt', encoding = 'utf-8', mode = ' rw + ') вот оно! СПАСИБО ПРИЯТЕЛЬ – alex

Смежные вопросы