从Pandas DataFrame创建Oracle表-编码错误

在读取大量带有此类错误的线程之后,我仍然无法解决此问题。

我正在尝试将Pandas数据帧写入oracle SQL。

我放弃了对熊猫使用cx_oracle,因为我需要一个动态脚本来在不同的数据帧上运行。

(*与cx_oracle连接非常适合使用连接编码='utf8'的任何查询执行) 并开始使用sqlalchemy。

首先,我阅读了一些需要设置的env变量 因此,我在加载cx_oracle之前将所有DB NLS数据保存在一个变量中,并在代码中进行了设置。 但同样的错误不断弹出。

*我尝试设置encoding ='ISO-8859-8-I',但仍然遇到相同的错误。  提醒cx_oracle连接使用'utf8'编码效果很好。

我的错误:

  

〜\ AppData \ Local \ Continuum \ anaconda3 \ lib \ codecs.py在   getencoder(编码)       957年       958“”“   -> 959 return lookup(encoding).encode       960       961 def getdecoder(encoding):

     

LookupError:未知编码:ISO-8859-8-I

nls_vars = [('NLS_LANGUAGE','AMERICAN'),('NLS_TERRITORY','AMERICA'),('NLS_CURRENCY','$'),('NLS_ISO_CURRENCY',('NLS_NUMERIC_CHARactERS','.,'),('NLS_CHARactERSET','IW8ISO8859P8'),('NLS_CALENDAR','GREGORIAN'),('NLS_DATE_FORMAT','DD-MON-RR'),('NLS_DATE_LANGUAGE',('NLS_SORT','BINARY'),('NLS_TIME_FORMAT','HH.MI.SSXFF AM'),('NLS_TIMESTAMP_FORMAT','DD-MON-RR HH.MI.SSXFF AM'),('NLS_TIME_TZ_FORMAT','HH.MI.SSXFF AM TZR'),('NLS_TIMESTAMP_TZ_FORMAT','DD-MON-RR HH.MI.SSXFF AM TZR'),('NLS_DUAL_CURRENCY',('NLS_COMP',('NLS_LENGTH_SEMANTICS','BYTE'),('NLS_NCHAR_CONV_EXCP','FALSE'),('NLS_NCHAR_CHARactERSET','AL16UTF16'),('NLS_RDBMS_VERSION','11.2.0.4.0'),('NLS_DMU_USAGE','20150504225937,20150504224941,IW8ISO8859')]
    import os
    for var,val in nls_vars :
        os.environ[var] = val
    import cx_Oracle
    from sqlalchemy import create_engine
    import pandas as pd
    engine = create_engine('oracle+cx_oracle://user:password@server:1521/db',encoding="utf8")
    conn = engine.connect()

如何使用正确的编码创建引擎,以便能够使用

df.to_sql(table_name,con=engine,if_exists='append')

df.to_sql(table_name,con=conn,if_exists='append')
springhcd 回答:从Pandas DataFrame创建Oracle表-编码错误

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2907748.html

大家都在问