【问题标题】:Unicode issues with Pandas and SQLAlchemy using Oracle Database使用 Oracle 数据库的 Pandas 和 SQLAlchemy 的 Unicode 问题
【发布时间】:2021-03-27 15:37:54
【问题描述】:

我正在尝试使用 pandas 读取 csv 文件并将其写入 oracle 数据库

import pandas as pd
import sqlalchmey types, create_engine

df = pd.read_csv("abc.csv")
df.dtypes
Name object
CName object
price float64

df.head(2)
Name    CName  price
Gary    ALS    13.0
John    Ülka   19.9

engine = create_engine('oracle://+ xxx + xxx + 'connection string')
connection = engine.connect()
df.to_sql(name='test-tbl', con=connection, index=False, if_exists='append')

 File "/apps/anaconda/4.6.14/envs/TST/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1468, in _handle_dbapi_exception
    util.reraise(*exc_info)
  File "/apps/anaconda/4.6.14/envs/TST/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 154, in reraise
    raise value
  File "/apps/anaconda/4.6.14/envs/TST/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1224, in _execute_context
    cursor, statement, parameters, context
  File "/apps/anaconda/4.6.14/envs/TST/lib/python3.6/site-packages/sqlalchemy/dialects/oracle/cx_oracle.py", line 1080, in do_executemany
    cursor.executemany(statement, parameters)
UnicodeEncodeError: 'ascii' codec can't encode character '\xea' in position 23: ordinal not in range(128)

目前我正在使用python3.6测试上面的代码,看到上面的错误。有没有人可以帮助解决这个问题?

包版本: 熊猫-1.0.3 cx_oracle-6.4.1 sqlalchemy-1.3.5

UTF-8 CSV 文件格式

【问题讨论】:

  • CHARACTER SEToracle 数据库了吗?
  • 不,我没有。代码在python2.7上运行良好,但从现在开始我必须使用python3.6。
  • 在读取 CSV 文件时尝试强制编码。尝试使用 encoding='utf-8', encoding='latin1', encoding='iso-8859-1' 或 encoding='cp1252'...
  • 当然。我已经使用 encoding='utf-8' 进行了测试,但没有运气。我会和其他人一起试试,然后告诉你。
  • 你设置了 NLS_LANG 吗?还是使用stackoverflow.com/a/53738233/4799035(一般使用UTF-8 可能)?或者你可以升级到默认使用 UTF-8 的 cx_Oracle 8。

标签: python pandas oracle sqlalchemy


【解决方案1】:

(复制 cmets 以获得可见性作为解决方案)

解决方案是使用类似的东西:

import cx_Oracle
e = create_engine(
    "oracle+cx_oracle://un:pw@connstr...",
    connect_args={
        "encoding": "UTF-8",
        "nencoding": "UTF-8"
    }
)

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 2019-08-26
    • 2016-02-17
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多