Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2008 12:51:44

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLObject ругается на символы кирилицы

Есть код:

# -*- coding: cp1251 -*-
from sqlobject import *
class Person(SQLObject):
firstName = StringCol()
middleInitial = StringCol(length=1, default=None)
lastName = StringCol()

sqlhub.processConnection = connectionForURI('mssql://sa:passw@127.0.0.1/sqlobject')
Person.createTable()
p = Person(firstName="John", lastName="Doe")
p = Person(firstName='Вася', lastName='Пупкин', middleInitial="Q")
print "OK"
запись с символами кирилицы успешно добавляется, но питон ругается на кодировку
Traceback (most recent call last):
File "C:\Documents and Settings\user\workspace\1\src\pack\sqlobject_example.py", line 15, in <module>
p = Person(firstName='Вася', lastName='Пупкин', middleInitial="Q")
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\declarative.py", line 89, in _wrapper
return fn(self, *args, **kwargs)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1183, in __init__
self._create(id, **kw)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1220, in _create
self._SO_finishCreate(id)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1247, in _SO_finishCreate
self._init(id)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 924, in _init
self._SO_selectInit(selectResults)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1127, in _SO_selectInit
colValue = col.to_python(colValue, self._SO_validatorState)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\col.py", line 513, in to_python
return value.encode(dbEncoding)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
оставить как есть как то неправильно, как исправить?



Офлайн

#2 Авг. 11, 2008 13:56:05

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

SQLObject ругается на символы кирилицы

Использовать юникод.

Офлайн

#3 Авг. 12, 2008 09:45:24

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLObject ругается на символы кирилицы

Ferroman
Использовать юникод.
Переделал на такой код.
# -*- coding: utf-8 -*-
from sqlobject import *
class Person(SQLObject):
firstName = StringCol()
middleInitial = StringCol(length=1, default=None)
lastName = StringCol()
sqlhub.processConnection = connectionForURI('mssql://sa:pass@127.0.0.1/sqlobject')
fname = u"Вася"
lname = u"Пупкин"
cp_db = 'cp1251'
p = Person(firstName=fname.encode(cp_db), lastName=lname.encode(cp_db))
a = Person.get
Данные содержащие символы кирилицы читаются в MS SQL Enterprise manager, но при работе программы появляется следующая ошибка:
Traceback (most recent call last):
File "C:\Documents and Settings\user\workspace\1\src\pack\sqlobject_example.py", line 19, in <module>
lastName=lname.encode(cp_db))
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\declarative.py", line 89, in _wrapper
return fn(self, *args, **kwargs)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1183, in __init__
self._create(id, **kw)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1220, in _create
self._SO_finishCreate(id)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1247, in _SO_finishCreate
self._init(id)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 924, in _init
self._SO_selectInit(selectResults)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1127, in _SO_selectInit
colValue = col.to_python(colValue, self._SO_validatorState)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\col.py", line 513, in to_python
return value.encode(dbEncoding)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Пробовал работать с MySQL (указав cp_db = ‘utf8’), но не смог добится правильного отображения кирилицы, а ошибка такая все равно появляется.
Почему данные сохраняются, а ошибка возникает?
Подскажите где сильно я ошибаюсь?
P.S. может проще отказаться от SQLObject и перейти на SQLAlchemy? Кто что использует?



Отредактировано (Авг. 12, 2008 10:24:33)

Офлайн

#4 Авг. 12, 2008 11:42:46

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLObject ругается на символы кирилицы

ответ запостил здесь



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version