Форум сайта python.su
proDivaНасчет списка полей после INTO и commit вам уже написали. Ну и замените 'Алина' на u'Alina'.
Есть такой sql-запрос:
“INSERT INTO fiz VALUES ('2000000000', ‘Normal’, ‘Алина’, ‘1982-04-07’, ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', 0, ’')”
Офлайн
OlDerдумаю лучше явно задавать кодировку - unicode('Алина','cp1251')
Насчет списка полей после INTO и commit вам уже написали. Ну и замените ‘Алина’ на u'Alina'.
Офлайн
baluЗапрос верный, в этом не сомневайтесь.
Не зная мускуля, предположу, что вы не правильно написали запрос.
baluв бд везде кодировка utf8, а вот у сервера по умолчанию была latin1, поменяла на utf8…. ничего не изменило, при команде print con.character_set_name() все равно выводится latin1.
Еще можно попробовать убрать умолчальную кодировку в БД - посмотреть как она будет себя вести.
OlDerне могу…. вся база должна быть на русском языке….. или вы предлагаете всех сотрудников банка заставить писать на латиннице?))
Ну и замените ‘Алина’ на u'Alina'.
Офлайн
proDivaПоставь кодировку конкретной базы в None, правда, потом посмотри как будет работать upper с русскими буквами.
в бд везде кодировка utf8, а вот у сервера по умолчанию была latin1, поменяла на utf8…. ничего не изменило, при команде print con.character_set_name() все равно выводится latin1.
Офлайн
proDivaПочему latin1? Там должна быть кодировка в которой вводится строка.
а если писать unicode('Алина','latin1')
#!/usr/bin/python from MySQLdb import connections db = connections.Connection(db='testing',host='localhost',user='user',passwd='pass') db.set_character_set('utf8') curs = db.cursor() inp = unicode(raw_input(), 'utf-8') curs.execute("insert into t values ('" + inp +"', 'some_text')") row=curs.execute("select * from t") for i in range(row): rw = curs.fetchone() print rw[0], rw[1]
Офлайн
slivlen
Вы напишите, пожалуйста, такой же пример с данными на кириллице. Потому что примеры с латинницей у меня тоже работают.
slivlenПотому что в модуле connections.py запрос перекодируется в кодировке базы, которая запрашивается таким образом:
Почему latin1? Там должна быть кодировка в которой вводится строка.
Офлайн
proDivaВ raw_input я ввожу с консоли строку на русском. В результате в переменной inp - хранится строка с кириллицей. Так что разница между примерами не большая.
Вы напишите, пожалуйста, такой же пример с данными на кириллице.
#!/usr/bin/python #-*- coding: utf-8 -*- from MySQLdb import connections db = connections.Connection(db='coding',host='localhost',user='root',passwd='') db.set_character_set('utf8') curs = db.cursor() #inp = unicode(raw_input(), 'utf-8') inp = unicode('кириллица', 'utf-8') curs.execute("insert into t values ('" + inp +"', 'some_text')") row=curs.execute("select * from t") for i in range(row): rw = curs.fetchone() print rw[0], rw[1]
Офлайн
slivlen
Действительно, так сработало….. все без ошибок, но осталась загадка…… после команды con.set_character_set('utf8'), когда запрашиваю print con.character_set_name() все равно выходит latin1)))
Офлайн
proDivaу меня тоже самое, похоже что это проблема библиотеки.
после команды con.set_character_set('utf8'), когда запрашиваю print con.character_set_name() все равно выходит latin1)))
Офлайн
Не знаю, что я сделала, но пример перестал работать, все та же ошибка:
Traceback (most recent call last):
File “C:/cb/1.py”, line 10, in -toplevel-
curs.execute(sql)
File “C:\Python24\Lib\site-packages\MySQLdb\cursors.py”, line 146, in execute
query = query.encode(charset)
UnicodeEncodeError: ‘latin-1’ codec can't encode characters in position 64-68: ordinal not in range(256)
Вот код:
#!/usr/bin/python
#-*- coding: utf-8 -*-
from MySQLdb import connections
db = connections.Connection(db='cb_test',host='localhost',user='root',passwd='1111')
db.set_character_set('utf8')
curs = db.cursor()
sql = unicode(“INSERT INTO fiz (NUMBER, FIO, DataRozhd) VALUES ('2000000001', ‘Алина’, ‘1982-04-07’); COMMIT”, ‘utf-8’)
curs.execute(sql)
row=curs.execute(“select * from fiz where NUMBER = ‘2000000001’;”)
for i in range(row):
rw = curs.fetchone()
print rw, rw
Офлайн