在Python 3.6中使用pandas.to_sql将外来(非ascii)字符写入Oracle DB

在Python 3.6中使用pandas.to_sql将外来(非ascii)字符写入Oracle DB,python,oracle,pandas,encoding,Python,Oracle,Pandas,Encoding,我很难将包含非ASCII字符的pandas.DataFrame中的值写入Oracle数据库。下面是一个可复制的示例(给定实际连接字符串): 我想问题是如何让它在写作时使用UTF-8编码。我知道create\u engine中encoding的默认值是utf-8',我认为它可以控制使用的编码。 我还尝试了dtypes={'firm':NVARCHAR(40,convert_unicode=True)}但是得到了相同的错误 我在编写(df['firm']=df.firms.str.encode('u

我很难将包含非ASCII字符的
pandas.DataFrame
中的值写入Oracle数据库。下面是一个可复制的示例(给定实际连接字符串):

我想问题是如何让它在写作时使用UTF-8编码。我知道
create\u engine
encoding
的默认值是
utf-8'
,我认为它可以控制使用的编码。 我还尝试了
dtypes={'firm':NVARCHAR(40,convert_unicode=True)}
但是得到了相同的错误

我在编写(
df['firm']=df.firms.str.encode('utf-8')
)之前尝试了对数据进行编码,但这确实解决了这个问题,只会导致更大的问题

这似乎是一个直截了当的问题,但我花了几个小时看文档,所以不知道该怎么办


使用的版本为:
Python:3.6
pandas:0.20
sqlalchemy:1.11

这是一个老问题,但我最近也遇到了同样的问题,并找到了一个适合我的解决方案

我必须把它放好

os.environ['NLS_LANG'] = ".AL32UTF8"

这对我很有效。但是我发现插入数据非常慢。

直接通过SQL查询数据会得到什么?还可以尝试
DUMP(firm,1016)
谢谢您的回复。我实际上是从头开始创建一个表,这样就没有什么可查询的了……当您插入一些内容后查询表时,会得到什么?不要说“数据随后被删除”-然后我会问您:“为什么要将数据存储在数据库中?”如果您尝试打印(sys.getdefaultencoding())?是否显示utf-8?@Uvar是的,utf-8是默认编码。
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 4: ordinal not in range(128)
os.environ['NLS_LANG'] = ".AL32UTF8"