Вот колонка модели:
title = Column(Unicode(100))
Когда я пытаюсь добавить запись в БД с кириллическими буквами в title
, я получаю сообщение об ошибке:
UnicodeEncodeError:
кодек latin-1 'не может кодировать символы в позиции ...
Если я закодирую его с помощью utf-8
title = request.POST['title'].encode('utf-8')
Я получаю следующую ошибку:
ProgrammingError: Вы не должны использовать 8-битные строки байтов, если вы не используете text_factory, которая может интерпретировать 8-битные строки btystrings (например, text_factory = str). Настоятельно рекомендуется вместо этого просто переключить свое приложение на строки Unicode.
Когда я декодирую UTF-8
title = request.POST['title'].decode('utf-8')
Появилась новая ошибка
UnicodeDecodeError: кодек «ascii» не может кодировать символы ...
Что делать?
EDIT:
Я использую Sqlite3 , я подумал, что это может быть важно.
РЕДАКТИРОВАТЬ 2: (код и обратная связь)
Мой код:
title = request.POST['title']
new_model = Model(
...
title = title,
...
)
DBSession.add(new_model)
DBSession.flush()
И трассировка (последний вызов был последним):
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/performance.py", строка 55, в resource_timer_handler
результат = обработчик (запрос)
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/tweens.py", строка 20, в excview_tween
ответ = обработчик (запрос)
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid_tm-0.3-py2.6.egg/pyramid_tm/init.py", строка 61, в tm_tween
response = обработчик (запрос)
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/router.py", строка 164, в handle_request
response = view_callable (context, request)
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/config/views.py", строка 316, в rendered_view
результат = просмотр (контекст, запрос)
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/config/views.py", строка 426, в _requestonly_view
ответ = просмотр (запрос)
Файл "/home/p/work/SUN/sunviver/sunviver/views/advert.py", строка 187, в create
вернуть HTTPFound (location = new_advert.url ())
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/httpexceptions.py", строка 444, в init
body_template = body_template, location = location, ** кВт)
Файл "/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/httpexceptions.py", строка 213, в init
Ответ. init (self, status = status, ** kw)
Файл "build / bdist.linux-i686 / egg / webob / response.py", строка 141, в init
setattr (self, name, value)
Файл "build / bdist.linux-i686 / egg / webob / descriptors.py", строка 112, в fset
value = value.encode ('latin-1')
И new_advert.url()
:
def url(self):
return '/%s/%s' % (self.id, self.title.replace(' ', '_'))
@J.F. Sebastian
Трассировка (последний последний вызов):
Файл "/usr/lib/python2.6/wsgiref/handlers.py", строка 93, в прогоне
self.result = приложение (self.environ, self.start_response)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/router.py", строка 187, в call
response = self.handle_request (запрос)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/toolbar.py", строка 157, в toolbar_tween
toolbar.process_response (ответ)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/toolbar.py", строка 55, в process_response
vars, request = request)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg / pyramid / renderers.py ", строка 81, в рендере
return helper.render (значение, None, request = request)
File" /home / ponomar / v / ENV / lib / python2.6 / site-packages / pyramid-1.3a3-py2.6.egg / pyramid / renderers.py ", строка 420, в рендере
result = renderer (значение, system_values)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_templating.py ", строка 162, в вызов
reraise (MakoRenderingException (errtext), Нет, exc_info [2])
Файл"/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_templating.py", строка 154, в вызов
result = template.render_unicode (** system)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg / mako / template.py ", строка 311, в render_unicode
as_unicode = True)
File" / home /ponomar / v / ENV / lib / python2.6 / site-packages / Mako-0.5.0-py2.6.egg / mako / runtime.py ", строка 660, в _render
** _kwargs_for_callable (callable_, data))
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako / runtime.py ", строка 692, в _render_context
_exec_template (наследовать, lclcontext, args = args, kwargs = kwargs)
File" / home / ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py ", строка 718, в _exec_template
callable_ (context, * args, ** kwargs)
Файл "pyramid_debugtoolbar_templates_toolbar_mako", строка 117, в render_body
Файл "/home/ponomar/v/ENV/lib/python2.6/ сиte-packages / pyramid_debugtoolbar-0.9.7-py2.6.egg / pyramid_debugtoolbar / Panel / headers.py ", строка 54, в содержании
vars, self.request)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/init.py", строка 24, в render
return render (template_name, vars, request = request)
File" / home / ponomar / v / ENV / lib / python2.6 / site-packages / pyramid-1.3a3-py2.6.egg / pyramid / renderers.py ", строка 81, в рендере
return helper.render (значение None, request =запрос)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/renderers.py",строка 420, в рендере
result = рендерер (значение, системные значения)
File "/home/ponomar/v/ENV/lib/python2.6/site-пакеты / pyramid-1.3a3-py2.6.egg / pyramid / mako_templating.py ", строка 162, в вызов
ререйз (MakoRenderingException (errtext), Нет, exc_info [2])
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg / pyramid / mako_templating.py ", строка 154, в вызов
result = template.render_unicode (** system)
Файл"/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/template.py", строка 311, в render_unicode
as_unicode = True)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py ", строка 660, в _render
** _ kwargs_for_callable (callable_, data))
File" / home / ponomar / v / ENV / lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py ", строка 692, в _render_context
_exec_template (наследовать, lclcontext, args =args, kwargs = kwargs)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 718, в _exec_template
callable_ (context, * args, ** kwargs)
Файл "pyramid_debugtoolbar_panels_templates_headers_mako", строка 34, в render_body
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/MarkupSafe-0.15-py2.6.egg/markupsafe/_native.py", строка 21, в escape
возврат разметки (Unicode (s)
MakoRenderingException:
Трассировка (последний последний вызов):
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_templating.py", строка 154, в call
result = template.render_unicode (** system)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/template.py", строка 311, в render_unicode
as_unicode = True)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 660, в _render
** _ kwargs_for_callable (callable_, data))
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 692, в _render_context
_exec_template (наследовать, lclcontext, args = args, kwargs = kwargs)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 718, в _exec_template
callable_ (context, * args, ** kwargs)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/templates/toolbar.mako", строка 61, в render_body
$ {panel.content () | п}
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/headers.py", строка 54, в содержании
vars, self.request)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/init.py" строка 24, в рендере
return render (template_name, vars, request = request)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/renderers.py", строка 81, в визуализации
return helper.render (значение, Нет, запрос = запрос)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/renderers.py", строка 420, в визуализации
результат = средство визуализации (значение, системное значение)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_templating.py", строка 162, в вызове
reraise (MakoRenderingException (errtext), Нет, exc_info [2])
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_templating.py", строка 154, в вызове
result = template.render_unicode (** system)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/template.py", строка 311, в render_unicode
as_unicode = True)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 660, в _render
** _ kwargs_for_callable (callable_, data))
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 692, в _render_context
_exec_template (наследовать, lclcontext, args = args, kwargs = kwargs)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 718, в _exec_template
callable_ (context, * args, ** kwargs)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/templates/headers.mako", строка 13, в render_body
$ {значение | ч}
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/MarkupSafe-0.15-py2.6.egg/markupsafe/_native.py", строка 21, в escape
возвращаемая разметка (юникод (ы)
MakoRenderingException:
Traceback (последний последний вызов):
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_templating.py", строка 154, в call
result = template.render_unicode (** system)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/template.py", строка 311, в render_unicode
as_unicode = True)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 660, в _render
** _ kwargs_for_callable (callable_, data))
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 692, в _render_context
_exec_template (наследовать, lclcontext, args = args, kwargs = kwargs)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/mako/runtime.py", строка 718, в _exec_template
callable_ (context, * args, ** kwargs)
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/templates/headers.mako", строка 13, в render_body
$ {значение | ч}
Файл "/home/ponomar/v/ENV/lib/python2.6/site-packages/MarkupSafe-0.15-py2.6.egg/markupsafe/_native.py", строка 21, в escape
возврат разметки (Unicode (s)
UnicodeDecodeError: Кодек 'ascii' не может декодировать байт 0xd0 в позиции 7: порядковый номер не в диапазоне (128)