Python使用cx_Oracle报错Ora-01036解决方案_南国

最近项目又让写爬虫程序,这次用的MySql数据库,上次用的Oracle数据库,这次在爬取数据之后存库的时候并没有用之前的拼接sql进行存库,因为前一段学习Python视频的时候,视频里的老师说拼接的话存在sql注入问题,所以这次用了占位符%s,来防止sql注入

在填充的时候就会加引号了,写完之后意识到之前写的那个爬虫脚本也存在相同问题,然后改成占位符%s之后一直报错,百度了之后才知道,Oracle中占位符不可以用%s,需要用:1,:2来占位,以后遇到坑总结下,可能就印象深刻啦

顺便将之前的几篇爬虫总结下

简单爬虫Python+Oracle
简单爬取信息之BeautifulFly+MySql
用Request简单爬取英雄联盟所有皮肤
动态爬取flash数据,这篇有点难,F12看不到数据需要借助抓包工具
看不懂上一篇抓包工具charles的话,结合这一篇博客理解

最原先拼接的SQL:

 sql = "insert into PRODUCTPRICE(ID,NAME,PRICE,UNIT,AREA,INDATE) values ('" + str(uuid.uuid1()) + "','" + record["farmProduceName"] + "','" + str(record["averagePrice"]) + "','" + b + "','" + record["marketName"] + "','" + str(record["reportDate"]) + "')"

改成MySql占位符的SQL:

 sql = "insert into PRODUCTPRICE(ID,NAME,PRICE,UNIT,AREA,INDATE) VALUES (%s,%s,%s,%s,%s,%s)"

结果就出现了“ORA-01036: 非法的变量名/编号”的错误。

解决方法:
将传参的占位符改为“:1, :2, :3”,

改成Oracle的SQL

 sql = "insert into PRODUCTPRICE(ID,NAME,PRICE,UNIT,AREA,INDATE) VALUES (:1,:2,:3,:4,:5,:6)"

再次执行,问题解决。

不积小流,何以成江河

你可能感兴趣的:(python,爬虫)