2017-02-24 24 views
0

我有一個基於Flask的項目,它使用Oracle數據庫並通過溝槽SQLAlchemycx_Oracle插件。我的問題是,我有一個簡單的表2 StringsSQLAlchemy Oracle無法插入帶有重音符號

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) 

在其中德編碼字符是根據不同的文本的價值。

這裏的值的例子:

object = Example() 
object.title = 'É its a character with accent' 
object.description = 'Á another characters with accent' 
db_session.add(object) 
db_session.commit() 

你有什麼想法,我能做些什麼來解決這個問題?一些配置?

謝謝:)

UPDATE:

如所建議的我嘗試其他2種方式:

類實施例(鹼): 表名 = '示例'

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

And

類實施例(鹼): 表名 = '示例'

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

仍然得到了同樣的錯誤。

回答

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」具有您實際需要的一切。

+0

我試過兩種方法,仍然有同樣的錯誤。 – patricia

+0

你有權訪問數據庫嗎?你可以驗證爲該表註冊的字符串的類型嗎? –

+0

另外你在create_engine函數中傳遞了什麼,你在那裏添加了一個特殊的編碼嗎? –

相關問題