Найти - Пользователи
Полная версия: проблема с добавлением в базу данных.
Начало » Pyramid / Pylons / TurboGears » проблема с добавлением в базу данных.
1
Sacri
Всем привет!
Никак не могу добавить русские символы через алхимию в 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
Буду очень признателен за помощь или мысли. Что ещё можно проверить, перепроверить? Что вообще можно поправить?
redixin
похоже что поле name ожидает unicode а приходит ему utf8 (не пинайте, в pylons не шарю)

чтото вроде
new_user.name = request.POST['name'].decode('utf8')
j2a
Возникает резонный вопрос, а через Python DB API получается ввести русские слова? Пример, пожалуйста.
Sacri
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

но это видимо уже из другой оперы.
j2a
user.name у тебя в юникоде. Либо используй repr, либо явно кодируй в нужную кодировку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB