SQLAlchemy如何避免错误:UnicodeEncodeError:“latin1”编解码器无法编码字符

2024-10-01 09:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这是模型列:

title = Column(Unicode(100))

当我试图用西里尔字母在title中向数据库添加一条记录时,我得到一个错误:

UnicodeEncodeError: latin-1' codec can't encode characters on position ...

如果我用utf-8编码

^{pr2}$

我得到下一个错误:

ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit btystrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

当我解码utf-8时

title = request.POST['title'].decode('utf-8')

有新的错误

UnicodeDecodeError: 'ascii' codec can't encode characters...

怎么办?在

编辑:

我使用的是Sqlite3,我认为这可能很重要。在

编辑2:(代码和回溯)

我的代码:

title = request.POST['title']

new_model = Model(
    ...
    title = title,
    ...
)
DBSession.add(new_model)
DBSession.flush()

和回溯(最近的最后一次呼叫):

File“/home/p/work/SUN/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_调试工具栏/panels/性能.py,第55行,在资源计时器处理程序中

result = handler(request)

File“/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/吐温.py“,第20行,例外情况下

response = handler(request)

File“/home/p/work/SUN/lib/python2.6/site packages/pyramid_tm-0.3-py2.6.egg/pyramid_tm/init.py”,第61行,tm_-tween格式

response = handler(request)

File“/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/路由器.py,第164行,在handle\u请求中

response = view_callable(context, request)

File“/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/config/视图.py“,第316行,在渲染视图中

result = view(context, request)

File“/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/config/视图.py“,第426行,在“仅请求”视图中

response = view(request)

文件“/home/p/work/SUN/sunviver/sunviver/views”/广告.py,第187行,在create中

return HTTPFound(location=new_advert.url())

File“/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/httpexceptions.py“,第444行,ininit

body_template=body_template, location=location, **kw)

File“/home/p/work/SUN/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/httpexceptions.py“,第213行,ininit

Response.init(self, status=status, **kw)

文件“构建/bdist.linux-i686/鸡蛋/webob/响应.py“,第141行,ininit

setattr(self, name, value)

文件“构建/bdist.linux-i686/鸡蛋/webob/描述符.py“,第112行,在fset中

value = value.encode('latin-1')

new_advert.url()

def url(self):
    return '/%s/%s' % (self.id, self.title.replace(' ', '_'))

@J.F.塞巴斯蒂安

回溯(最近的最后一次呼叫): 文件“/usr/lib/python2.6/wsgiref/处理程序.py“,第93行,运行中

self.result = application(self.environ, self.start_response)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/路由器.py“,第187行,in调用

response = self.handle_request(request)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_调试工具栏/工具栏.py,第157行,在工具栏之间

toolbar.process_response(response)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_调试工具栏/工具栏.py“,第55行,处理中的响应

vars, request=request)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/渲染器.py“,第81行,呈现中

return helper.render(value, None, request=request)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/渲染器.py“,第420行,呈现

result = renderer(value, system_values)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第162行,in调用

reraise(MakoRenderingException(errtext), None, exc_info[2])

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第154行,in调用

result = template.render_unicode(**system)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/模板.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/运行时.py“,第660行,in\u render

**_kwargs_for_callable(callable_, data))

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第692行,在\u render\u上下文中

_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第718行,在\u exec_templa中te公司

callable_(context, *args, **kwargs)

文件“pyramid_debugtoolbar_templates_toolbar_mako”,第117行,在render_body中

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_调试工具栏/panels/标题.py“,第54行,内容

vars, self.request)

File“/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)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/渲染器.py“,第81行,呈现中

return helper.render(value, None, request=request)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/渲染器.py“,第420行,呈现

result = renderer(value, system_values)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第162行,in调用

reraise(MakoRenderingException(errtext), None, exc_info[2])

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第154行,in调用

result = template.render_unicode(**system)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/模板.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/运行时.py“,第660行,in\u render

**_kwargs_for_callable(callable_, data))

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第692行,在\u render\u上下文中

_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第718行,执行模板中

callable_(context, *args, **kwargs)

render_body中的文件“pyramid_debugtoolbar_panels_templates_headers_mako”,第34行

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/MarkupSafe-0.15-py2.6.egg/MarkupSafe/_原生.py“,第21行,在逃跑

return Markup(unicode(s)

制造异常:

回溯(最近的最后一次呼叫):

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第154行,in调用

result = template.render_unicode(**system)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/模板.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/运行时.py“,第660行,in\u render

**_kwargs_for_callable(callable_, data))

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第692行,在\u render\u上下文中

_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第718行,执行模板中

callable_(context, *args, **kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/templates/工具栏.mako“,第61行,在render_body中

${panel.content()|n}

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_调试工具栏/panels/标题.py“,第54行,内容

vars, self.request)

File“/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)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/渲染器.py“,第81行,呈现中

return helper.render(value, None, request=request)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/渲染器.py“,第420行,呈现

result = renderer(value, system_values)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第162行,in调用

reraise(MakoRenderingException(errtext), None, exc_info[2])

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第154行,in调用

result = template.render_unicode(**system)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/模板.py,第311行,在render_unicode中

as_unicode=True)

文件“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第660行,in\u render

**_kwargs_for_callable(callable_, data))

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第692行,在\u render\u上下文中

_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第718行,执行模板中

callable_(context, *args, **kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/templates/标题.mako“,第13行,在render_body中

${value|h}

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/MarkupSafe-0.15-py2.6.egg/MarkupSafe/_原生.py“,第21行,在逃跑

return Markup(unicode(s)

生成异常:

回溯(最近的最后一次呼叫):

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid-1.3a3-py2.6.egg/pyramid/mako_模板.py“,第154行,in调用

result = template.render_unicode(**system)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/模板.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/运行时.py“,第660行,in\u render

**_kwargs_for_callable(callable_, data))

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第692行,在\u render\u上下文中

_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/Mako-0.5.0-py2.6.egg/Mako/运行时.py“,第718行,执行模板中

callable_(context, *args, **kwargs)

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/pyramid_debugtoolbar-0.9.7-py2.6.egg/pyramid_debugtoolbar/panels/templates/标题.mako“,第13行,在render_body中

${value|h}

File“/home/ponomar/v/ENV/lib/python2.6/site-packages/MarkupSafe-0.15-py2.6.egg/MarkupSafe/_原生.py“,第21行,在逃跑

return Markup(unicode(s)

UnicodeDecodeError:“ascii”编解码器无法解码位置7的字节0xd0:序号不在范围内(128)


Tags: pyenvpyramidhomeeggrequestlibpackages
1条回答
网友
1楼 · 发布于 2024-10-01 09:24:18

编码将Unicode字符串转换为字节字符串。你需要往另一个方向走, decodingrequest.POST['title'].decode('utf-8')(假设request.POST['title']是UTF8编码的str)。在

相关问题 更多 >