
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.169] |
![]() |
|
![]() |
|
|
Имеется база данных MySQL в KOI8-R. Имеется скрипток на python с использованием MySQLdb, который выбирает из БД данные. Вначале у меня вся кириллица была вопросиками. Как ни прыгал внутри скрипта - не помогало. Нашел рекомендацию подправить в настройках самого мускула кодировку клиента на KOI8-R. Поменял. Помогло. Но ведь это не выход. А как быть в общем случае? (тот же php и perl нормально работали без изменения настроек мускула)
Еще обнаружилась вторая проблема - при попытке сделать INSERT в БД кириллицей на том же KOI8-R скрипт вылетает с жуткой ошибкой где-то среди модулей со строкой encoding. Как быть? Может кто что подскажет? |
Сообщ.
#2
,
|
|
|
Подсказать без самого скрипта... Короче юзай правильно кодировки!
![]() |
Сообщ.
#3
,
|
|
|
![]() ![]() #!/usr/local/bin/python # -*- coding: koi8-r -*- import MySQLdb # Настройки базы данных dbname="dbname" host="localhost" dblogin="login" dbpass="pass" # Соединение и запрос к БД db = MySQLdb.connect(db='%s' % (dbname), host='%s' % (host), user='%s' % (dblogin), passwd='%s' % (dbpass)) c = db.cursor() c.execute("SELECT Username,Customers.CustomerID,Balance,Overdraft,ifnumber,PackageGroupID,old_in,old_out,Accounts.AccountID FROM Accounts INNER JOIN dec_is_wan ON Accounts.AccountID=dec_is_wan.AccountID INNER JOIN Customers ON Accounts.CustomerID=Customers.CustomerID") # Тут куча кода не по теме .................. for cur_cl in c.fetchall(): # Данные о текущем клиенте username = cur_cl[0] cus_id = cur_cl[1] balance = cur_cl[2] overdraft = cur_cl[3] ifnumber = cur_cl[4] package_group_id = cur_cl[5] old_in = cur_cl[6] old_out = cur_cl[7] acc_id = cur_cl[8] # Тут тож арифметика всякая .............. # Раньше тут бралось из БД описание в кириллице. но до правки конфига самой mysql на тему кодироовки клиента КОИ8 были одни вопросики # cc = db.cursor() # cc.execute("SELECT Description FROM PackageGroup WHERE PackageGroupID=%d" % (package_group_id)) # res_cur = cc.fetchone() # descr = res_cur[0] # print descr # cc.close() # Начал задавать статик описание латиницей - если задать кириллицей - нижзе будет "борода" descr = "Traffic mode (LU: %s) day/night" % (update_time) .............................. .............................. # Вот тут идет вставка дескрипшина в кириллице (только временно в латинице) # Когда из БД он выбирался (см. выше) вопросиками - он тут нормально вставлялся # Когда в конфиг самого мускула вписал, что клиент в кодировке КОИ8 - из БД выбираться дескрипшн стал нормально # А вот при вставке кириллицы - тут вылетает еррор - смотри после кода # Если задать descr = "Киррилица" - тот же эффект cc.execute("INSERT INTO Invoices (CustomerID,Description,DateBilled,Amount) values (%d,\"%s\",\"%s\",%f)" % (cus_id,descr,curdate,amount)) .................................. .................................. c.close() db.close() Вот пример для ошибки для запроса апдейт с переменной descr содержащей кириллицу # ./Acct_WAN.py Traceback (most recent call last): File "./Acct_WAN.py", line 195, in ? cc.execute("UPDATE Invoices SET Amount=%f,Description=\"%s\" WHERE InvoiceID=%d" % (amount,descr,inv_id)) File "/usr/local/lib/python2.4/site-packages/MySQLdb/cursors.py", line 146, in execute query = query.encode(charset) UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 62: ordinal not in range(128) |
Сообщ.
#4
,
|
|
|
На вид вроде все верно!
|