在读取大量带有此类错误的线程之后,我仍然无法解决此问题。
我正在尝试将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')