我有一个基于Flask
的项目,该项目使用Oracle
数据库并通过SQLAlchemy
和cx_Oracle
插件进行通信。我的问题是我有一个简单的表2 Strings
:
class Example(Base):
__tablename__ = 'example'
id = Column(Integer, primary_key=True)
title = Column(String(255))
description = Column(String(1024))
当我尝试使用重音来保存值时,我收到此错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 5: ordinal not in range(128)
其中de encode字符根据文本的值而不同。
以下是值的示例:
object = Example()
object.title = 'É its a character with accent'
object.description = 'Á another characters with accent'
db_session.add(object)
db_session.commit()
你知道我能做些什么来解决这个问题吗?一些配置?
谢谢:)
更新:
正如所建议的那样,我尝试了另外两种方式:
类示例(基础): tablename ='example'
id = Column(Integer, primary_key=True)
title = Column(Unicode(255))
description = Column(Unicode(1024))
和
类示例(基础): tablename ='example'
id = Column(Integer, primary_key=True)
title = Column(String(255, convert_unicode=True))
description = Column(String(1024, convert_unicode=True))
仍然有同样的错误。
答案 0 :(得分:0)
这是因为您使用的名称,特别是重音不在ASCII表中,请尝试将title属性声明为:
title = Column(String(255, convert_unicode=True)
如果不将其声明为Unicode
而不是String
,这可能会有所帮助。
有关更多信息,您还可以在此处查看文档:
http://docs.sqlalchemy.org/en/latest/core/type_basics.html
您还应确保在create_engine()
功能上使用编码可选参数作为" UTF-8"或" latin1"取决于您可能需要输入的字符集。当然" UTF-8"拥有你可能真正需要的一切。