zeiro_sun
小鱼儿Yver
采纳率100%
2018-12-09 08:55 阅读 1.1k

python cx_Oracle 将sql使用游标执行编码问题

将python爬取到的信息使用format填入设定的sql中,再使用游标执行这串sql。

sql = "INSERT INTO SPIDER_BJ_ATTRIBUTE(jj, hxjg, jzmj, szlc, JZSJ, cx, zxqk, id, fbsj ,zj, dj, sf, fwhx) VALUES(。。。。)

            print(sql)
            cursorObj.execute(sql)
            connectObj.commit()

最终打印的sql是

INSERT INTO SPIDER_BJ_ATTRIBUTE(jj, hxjg, jzmj, szlc, JZSJ, cx, zxqk, id, fbsj ,zj, dj, sf, fwhx) VALUES('沿湖小区 精装南北通透 独立两室 客厅通阳台 无税', '2室2厅','90m²', '中层(共6层)','2000年建造', '南北','精装修', ' 1525906959', '2018年12月08日','190万', '21111 元/m²', '57.00万', '普通住宅')

但是最终执行游标时出现了错误
UnicodeEncodeError: 'gbk' codec can't encode character '\xb2' in position 145: illegal multibyte sequence

刚开始学python,基础也不是很好的我。在网上看了一些帖子也没有把问题解决。

请各位大佬帮忙看一下。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    weixin_39416561 lyhsdy 2018-12-10 01:31

    我猜是 '21111 元/m²'有问题,换一个123进去试试

    点赞 评论 复制链接分享
  • zeiro_sun 小鱼儿Yver 2018-12-09 09:34

    通过努力问题明确了一些

    我把sql进行了转码

    print(sql.encode("utf-8"))
    cursorObj.execute(sql.encode("utf-8"))
    connectObj.commit()
    

    b"INSERT INTO SPIDER_BJ_ATTRIBUTE(jj, hxjg, jzmj, szlc, JZSJ, cx, zxqk, id, fbsj ,zj, dj, sf, fwhx) VALUES('\xe9\x80\x9a\xe5\xb7\x9e\xe4\xb8\x9c\xe9\xa6\x96\xe4\xbb\x9810\xe4\xb8\x87\xef\xbc\x8c\xe8\xbf\x91\xe5\x9c\xb0\xe9\x93\x81 \xe7\xb2\xbe\xe8\xa3\x85\xe4\xba\xa4\xe6\x88\xbf \xe6\x8e\xa5\xe9\x80\x81\xe7\x9c\x8b\xe6\x88\xbf', '2\xe5\xae\xa42\xe5\x8e\x85','82m\xc2\xb2', '\xe9\xab\x98\xe5\xb1\x82(\xe5\x85\xb120\xe5\xb1\x82)','2017\xe5\xb9\xb4\xe5\xbb\xba\xe9\x80\xa0', '\xe5\x8d\x97\xe5\x8c\x97','\xe7\xb2\xbe\xe8\xa3\x85\xe4\xbf\xae', ' 1497237168', '2018\xe5\xb9\xb411\xe6\x9c\x8814\xe6\x97\xa5','101\xe4\xb8\x87', '12317 \xe5\x85\x83/m\xc2\xb2', '30.30\xe4\xb8\x87', '\xe6\x99\xae\xe9\x80\x9a\xe4\xbd\x8f\xe5\xae\x85')"

    错误变成了
    cx_Oracle.DatabaseError: ORA-00917: 缺失逗号
    但是插入的结果不是中文。。。。

    点赞 评论 复制链接分享

相关推荐