Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQLdb, Проблемы с кодировкой MySQLdb 
:(
    Опции темы
ser_gen
Дата 1.11.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 25.9.2006

Репутация: 1
Всего: 1



Всем привет!

есть такой код
Код

cursor=self.myDB.cursor()
s="INSERT INTO creators (c_name,c_comment) VALUES ('Имя','Комментарий')"
print s
cursor.execute(s)
print str(cursor.rowcount)+" row inserted"


При вызове получается такая конитель:
INSERT INTO creators (c_name,c_comment) VALUES ('Имя','Комментарий')
Traceback (most recent call last):
  File "./dbc/BaseSQL.py", line 65, in ?
    db.insert(tbl)
  File "./dbc/BaseSQL.py", line 41, in insert
    cursor.execute(s)
  File "/usr/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 49: ordinal not in range(128)

Но если строка s не содержит русских букв то всё нормально. 
Пробовал с преобразовывать в Unicode
Код

s=unicode("INSERT INTO creators (c_name,c_comment) VALUES ('','')","CP1251")

но таже ошибка

query = query.encode(charset)
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 49-51: ordinal not in range(256)
Замена CP1251 на KOI8-R не спасла
ОС Linux SlackWare, MySQL 4.1.14, python2.4


Это сообщение отредактировал(а) ser_gen - 1.11.2006, 13:01
PM MAIL   Вверх
diam
Дата 1.11.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 3
Всего: 16



В БД какая кодировка?
PM MAIL   Вверх
pythonwin
Дата 1.11.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



ser_gen, 
MysqlDB проблема с русским 2  Ура получилось!!!

Цитата

>А set character set cp1251 пробовали????

Попробовал и получилось! Русский выдает нормально, но conn.character_set_name() всеравно выдает latin1_swedish_ci smile
Кстати SET NAMES cp1251 дает тот же эффект.

СПАСОБО ОГРОМНОЕ ВСЕМ !!!

>А почему Вы привязываете свой проект к Mysql?
Честно сказать по совету другого программиста, я сам БД не выбирал, но смотрел сравнения. Меня MySql полностью устраивает. Как я понял из сравнений MySql была написана как раз для Web приложений. Ну и на большинстве хостингов именно MySql стоит. Если я не правильно выбрал, то объясните почему?

Вот рабочий код для тех у кого та же проблема:
# -*- coding: cp1251 -*-
import MySQLdb
from MySQLdb.constants import FIELD_TYPE, FLAG

conn = MySQLdb.connect(host='localhost', user='root', db='fc')
curs = conn.cursor()
curs.execute("set character set cp1251")
#curs.execute("SET NAMES cp1251")

print conn.character_set_name()

curs.execute('SELECT * FROM test')
for row in curs:
    for s in row:
        print s,
    print 


Добавлено @ 13:29 
Цитата(diam @  1.11.2006,  20:25 Найти цитируемый пост)
В БД какая кодировка? 

скорее всего 
Цитата(ser_gen @  1.11.2006,  20:00 Найти цитируемый пост)
ascii

PM WWW GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.