py3pandasdataframeto_sql中⽂插⼊oracle失败
在做dataframe 导⼊oracle db时报的错
'ascii' codec can't encode characters in position 0-3: ordinal not in range(128),
⽹上了很多资料都⽆效,
代码中的df是我⾃⼰的dataframe数据
conn_string = 'oracle+cx_oracle://username:password@ip:port/dbname?charset=utf8'
engine = ate_engine(conn_string, echo=False)
<_sql(table_name, t(), if_exists='append', index=False,
得的组词dtype={'id': pes.NVARCHAR(length=255),
'ddc_id': pes.Integer(),
'tbl_name': pes.NVARCHAR(length=255),
'tbl_comment': pes.NVARCHAR(length=255),
基本护肤步骤>行风评议心得体会'owner': pes.NVARCHAR(length=255)
}
)
这⾥只说⼀下⽐较常⽤的⼏个:
1.table_name : 字符串类型,表名(⼤⼩写均可)
<:数据库连接池,⽤来封装数据库连接的信息,像java中有odbc-driver连接oracle,jdbc-driver连接mysql,
python中也提供了多种连接包,我⽤的时oracle,所以import cx-oracle包。另外,engine数据库连接对象可以使⽤sqlalchemy。记得要同步编码格式charset !!
3.if_exists:有三个可选项: ①None(如果表已存在,则不做任何事) ② append(如果表存在,则往表后添加数据,如果表中有索引约束、外键之类的 ⼀定要注意传⼊数据是否可⾏,⽆法从to_sql来控制
数据库的约束级别) ③ replace(见⽂思意,在插⼊数据前,drop该表,根据表名重新create,insert数据)
4.index: 指的是dataframe中的索引列(从0开始的唯⼀指代dataframe的⾏号),这⾥代表是否将该索引列当做数据库表中的column,⼀般都是False,具体还是以需求为准
5.dtype:指定dataframe的列类型,哪怕df中的某列是int类型,也可以强制转换成string类型,
问题来了,在.py⽂件头部加上
# -*- coding: utf-8 -*-
在数据库连接engine 中也加上了charset=utf8的编码格式(库编码、表编码都是utf8)
run 后还是报:
'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
看到这个错误就能知道是编码问题,但是⼀时不知哪⾥编码出错,仔细看了下 position0-3,对应的是我dataframe df中的tbl_comment 列,⽽这⼀列的数据均是 中⽂,尝试将该列全部改为英⽂,正常⼊库,
中国感恩节但是,⽂件头部,数据库引擎,数据库编码格式都统⼀了,哪⾥还有问题呢?
可以通过两种办法让你的程序跑起来
数据库恢复⽅法1. 在函数的开始
import os
壑怎么读
⽅法2. 在你的系统环境变量中增加NLS_LANG的配置,同样两种value均可,但是在你执⾏程序前要重启⼀下电脑。。。最后:
这个编码问题同样也会在数据库中捞数据出现。解决⽅法⼀致
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论