pymysql学习笔记

学习笔记

最近在学习使用python编写爬虫爬取自己学校网站的信息并存入mysql中,在爬取过程中异常顺利,但是在存入Mysql的过程中却踩了好几个坑,分享一下在用pymysql存数据时踩过的几个坑。
Pymysql向mysql存入数据,我写的是先链接数据库,然后用字符串的形式编写好mysql的指令块,再通过pymysql的execute和commit上交执行,所以其实在这个过程中容易发生错误的就是这些mysql指令的编写。
遇到的其中一个坑就是:
pymysql.err.InternalError: (1054, "Unknown column 'XXXXX' in 'field list'")
这个坑上网搜了一下网上都是这样的:
pymysql.err.InternalError: (1054, "Unknown column 'nan' in 'field list'")
这说是在存入mysql时要将nan替换成none,然后我就根据这个去检查我的代码,然后还是没发现错误在哪,最后又上网查,终于查到了我那个报错,才知道这是由于引号引起的,
最初写的插入Mysql的指令是:

'''INSERT INTO XXXXXXX(标题, 日期, 作者, 阅读量, 正文) VALUES(%s,%s,%s,%s,%s)'''

然后改成了:

'''INSERT INTO XXXXXXXX(标题, 日期, 作者, 阅读量, 正文) VALUES("%s","%s","%s","%s","%s")'''

这个报错就解决了。
还有一个坑,让我搞了好久才搞定,就是:

pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the...

对于这个报错,上网一搜,就有很多,说是在将数据插入到mysql过程中,这些python的字符串需要转义,要用:

pymysql.escape_string(字符串变量)

来处理,然后我就试了一下,一开始我直接把execute语句中的元组args加上这一句,然后报错:

AttributeError: 'tuple' object has no attribute 'translate'

然后我又把这个元组建立时每个变量都加上这个函数,还是没用,还是显示

pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the...

可是还是上网搜,都是说需要转义,又试了改成execute(sql%args),和改成format但是就还是不行,然后我就试了一下新建一个python文件重新写,直接把要存进去的内容写进字符串,没用爬虫,然后他居然没报错!!
最后回到爬虫的那一个文件看了一下发现创建table的语句我写的是:

'''reate table if not exists passage(
             标题 char(100) not null,
             日期 char(30) not null,
             作者 char(50) not null,
             阅读量 char(20) not null,
             正文 text(5000) not null)
    '''

然后插入的语句:

'''INSERT INTO pasage(标题, 日期, 作者, 阅读量, 正文) VALUES("%s","%s","%s","%s","%s")'''

把创建的passage写成了pasage,将插入的pasage改为passage,再运行,它就过了。。。。
其实还遇到了:

TypeError: not all arguments converted during string formatting

这个是

'''INSERT INTO pasage(标题, 日期, 作者, 阅读量, 正文) VALUES("%s","%s","%s","%s","%s")'''

这个语句中"%s"漏了一个加上就好了。
总的就是,写mysql的指令时要仔细一些。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值