Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 26, 2007 20:29:26

Sacri
От:
Зарегистрирован: 2007-11-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с добавлением в базу данных.

Всем привет!
Никак не могу добавить русские символы через алхимию в Mysql. Это кошмар какой-то. Все сконфигино под utf8
вот что выдает мускль, чтобы не быть голословным

+--------------------------+--------------------------+
| Variable_name | Value |
+--------------------------+--------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\MySQL\share\charsets\ |
+--------------------------+--------------------------+
в pylons тоже все вроде заточено чтобы корректно работать с utf8 (от шаблонов, до самих хтмлек, и всяких response).
но при попытке добавить выполнить следущий код
def user_reg_process(self):
new_user = Users()
# Set the data.
new_user.reg_date = datetime.datetime.now()
new_user.name = request.POST['name']
new_user.surname = request.POST['surname']
new_user.about = request.POST['about']
print new_user.name
Session.save(new_user)
Session.commit()
redirect_to('/users/user_reg_done')
выподает следущая ошибка
<class ‘sqlalchemy.exceptions.OperationalError’>: (OperationalError) (1366, “Incorrect string value: ‘\\xD1\\x81’ for column ‘name’ at row 1”) u'INSERT INTO users (name, surname, about) VALUES (%s, %s, %s)'
(это я ввел одну букву “С” в поле name и засабмител)
что здесь никорректного я понять не могу…
структура самой таблице такова
users = Table('users', metadata,
Column('id', types.Integer, primary_key=True),
Column('name', types.Unicode(50)),
Column('username', types.Unicode(50)),
Column('surname', types.Unicode(50)),
Column('email', types.String(60)),
Column('password', types.String),
Column('about', types.Unicode),
Column('birthday', types.Date),
Column('email', types.String(60)),
Column('tags', types.String),
Column('karma', types.Float),
Column('reg_date', types.Date),
)
class Users(object):
pass
Буду очень признателен за помощь или мысли. Что ещё можно проверить, перепроверить? Что вообще можно поправить?



Офлайн

#2 Ноя. 26, 2007 20:52:57

redixin
От:
Зарегистрирован: 2006-11-27
Сообщения: 66
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с добавлением в базу данных.

похоже что поле name ожидает unicode а приходит ему utf8 (не пинайте, в pylons не шарю)

чтото вроде

new_user.name = request.POST['name'].decode('utf8')



Офлайн

#3 Ноя. 26, 2007 21:00:13

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с добавлением в базу данных.

Возникает резонный вопрос, а через Python DB API получается ввести русские слова? Пример, пожалуйста.



Офлайн

#4 Ноя. 26, 2007 23:13:59

Sacri
От:
Зарегистрирован: 2007-11-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с добавлением в базу данных.

j2a
Возникает резонный вопрос, а через Python DB API получается ввести русские слова? Пример, пожалуйста.
Спасибо, начал тестить с помощью стандартных приемов и нашел, что у меня все таки кодировка базы даных была кривая.
Теперь все добавляется.
Но, возникла проблема, на получения обратно)
а именно
users_q = Session.query(Users)
for user in users_q:
print user.name
выдает
<type ‘exceptions.UnicodeDecodeError’>: ‘utf8’ codec can't decode byte 0xa3 in position 0: unexpected code byte

но это видимо уже из другой оперы.



Офлайн

#5 Ноя. 27, 2007 05:58:27

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с добавлением в базу данных.

user.name у тебя в юникоде. Либо используй repr, либо явно кодируй в нужную кодировку.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version