Уведомления

Группа в Telegram: @pythonsu

#1 Июль 26, 2009 00:35:29

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятное поведение sqlalchemy относительно кодировок.

Делаю я значит так:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, Column, Integer, Unicode, UnicodeText

Base = declarative_base()

class User(Base):
__tablename__ = "users"
uid = Column(Integer, primary_key=True)
name = Column(Unicode(200, convert_unicode = True))

engine = create_engine('mysql://harvester:password@localhost/harvest?charset=utf8',
# engine = create_engine('mysql://harvester:password@localhost/harvest',
convert_unicode=True, encoding="utf-8")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)

user = User()
user.uid = id
user.name = userdata['name']

session.add(user)
session.commit()
Все работает нормально, в базе оказываются данные в правильной кодировке.
Но если использовать закоменнтированную стороку, то в базу данные попадают в сбитой кодировке, при этом sqlalchemy даже не генирирует варнингов. Само интересное, что в документации к sqlalchemy написано, что достаточно указать кодировку в create_engine через кейворд encoding = “utf-8”.

Вопрос собственно в том, почему mysql'у не хватает прямых указаний от sqlalchemy и приходится передавать параметр в url базы данных?

Конфигурация mysql'а следующая:
mysql> \s                                                                                                                 
--------------
mysql Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (i486) using readline 5.2

Connection id: 208
Current database: harvest
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.75-0ubuntu10.2 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 1 day 8 hours 26 min 19 sec

Threads: 1 Questions: 3597 Slow queries: 0 Opens: 459 Flush tables: 3 Open tables: 1 Queries per second avg: 0.031
--------------
Это происходит из-за бага где? У меня, в sqlalchemy или в mysql?



Офлайн

#2 Авг. 5, 2009 10:49:33

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Непонятное поведение sqlalchemy относительно кодировок.

Х.з. Лекарства не нашел, хотя не вижу проблем что бы указывать этот параметр.
Но я обычно делаю так – mysql://harvester:password@localhost/harvest?init_command=set%20names%20%22utf8%22
Про charset= не знал.

..bw



Отредактировано (Авг. 5, 2009 10:52:41)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version