【问题标题】:SQLAlchemy Oracle can't insert characters with accentsSQLAlchemy Oracle 无法插入带重音符号的字符
【发布时间】:2017-07-15 14:25:31
【问题描述】:

我有一个基于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()

你知道我能做些什么来解决这个问题吗?一些配置?

谢谢:)

更新:

按照建议,我尝试了其他 2 种方法:

类示例(基础): 表名 = '示例'

id = Column(Integer, primary_key=True)
title = Column(Unicode(255))
description = Column(Unicode(1024))

类示例(基础): 表名 = '示例'

id = Column(Integer, primary_key=True)
title = Column(String(255, convert_unicode=True))
description = Column(String(1024, convert_unicode=True))

还是同样的错误。

【问题讨论】:

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


    【解决方案1】:

    那是因为您使用的名称,特别是重音符号不在 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”拥有您可能真正需要的一切。

    【讨论】:

    • 您可以访问数据库吗?您能验证为该表注册的字符串类型吗?
    • 另外你在create_engine函数中传入了什么,你是不是在里面添加了特殊的编码?
    • VARCHAR2(225 BYTE)
    • 不,我没有传递任何特殊编码,只是传递连接的 url。
    • 数据库编码为'ISO885915`(这件事我没有发言权)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2013-06-29
    • 2013-01-21
    • 1970-01-01
    相关资源
    最近更新 更多