SQLAlchemy Oracle无法插入带重音的字符

时间:2017-02-24 16:46:01

标签: oracle flask flask-sqlalchemy python-3.5 cx-oracle

我有一个基于Flask的项目,该项目使用Oracle数据库并通过SQLAlchemycx_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))

仍然有同样的错误。

1 个答案:

答案 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"拥有你可能真正需要的一切。