Joe*_*ron 5 python oracle encoding pandas
pandas.DataFrame我在将包含非 ASCII 字符的值写入 Oracle 数据库时遇到困难。这是一个可重现的示例(给定真实的连接字符串):
import pandas as pd\nfrom sqlalchemy import create_engine, Unicode, NVARCHAR\n\nconnection_string = oracle://<name>:<password>@<database>'\n\ndf = pd.DataFrame([\n ['Soci\xc3\xa9t\xc3\xa9 G\xc3\xa9n\xc3\xa9rale']\n ], columns=['firm'])\n\nconn = create_engine(connection_string, encoding='utf-8')\ndtypes = {'firm': Unicode(40)}\n\ndf.to_sql('test', con=connection_string, dtype=dtypes, if_exists='replace')\nRun Code Online (Sandbox Code Playgroud)\n\n产生的错误看起来像
\n\nUnicodeEncodeError: 'ascii' codec can't encode character '\\xe9' in position 4: ordinal not in range(128)\nRun Code Online (Sandbox Code Playgroud)\n\n我想问题是如何让它在写入时使用UTF-8编码。encoding我知道in的默认值create_engine是utf-8',我认为它会控制使用的编码。\n我也尝试过dtypes = {'firm': NVARCHAR(40, convert_unicode=True)},但遇到了同样的错误。
我尝试在写入 ( ) 之前对数据进行编码,df['firm'] = df.firms.str.encode('utf-8')这确实解决了这个问题,但结果却导致了更大的问题。
这似乎是一个简单的问题,但我花了几个小时查看文档和 SO,但不知道该怎么做。
\n\n使用的版本是;Python: 3.6, pandas: 0.20,sqlalchemy: 1.11
这是一个老问题,但我最近一直在努力解决同样的问题,并找到了一个对我有用的解决方案。
我必须设置
os.environ['NLS_LANG'] = ".AL32UTF8"
Run Code Online (Sandbox Code Playgroud)
这对我有用。但是我发现插入数据非常慢。
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |