python 数据库操作pymysql
因为在网上爬取数据进行数据库操作的时候一般数据量都比较大,那么是先把获取到的数据保存起来执行一条插入语句好还是边采边存好,
看到一篇博客http://blog.csdn.net/u012734441/article/details/42269705
其中博主对这两种方式进行了对比,得到的结果是一次插入多条比循环插入的速度要快。
既然得到证实了,我就来说说我在写数据的时候的问题。
首先,网上爬取到的数据大部分是重复的,然后我在进行数据插入的时候自己定义了唯一索引,那么,在进行数据库插入操作的时候,
一、将数据保存成数组,直接进行插入操作
for i in soup.find('div',id='category_lk').find_all('li'):
href = i.find('a')['href']
title = i.find('a')['title']
apid = requests2.md5(href)
t = int(time.time())
value = (apid,0,title,href,t)
arr.append(value)
mysql.insertAll('insert into may_hlinkurl (apid,pid,title,href,time) values(%s,%s,%s,%s,%s)',arr)
二、将数据循环插入
for i in soup.find('div',id='category_lk').find_all('li'):
href = i.find('a')['href']
title = i.find('a')['title']
apid = requests2.md5(href)
t = int(time.time())
value = (apid, 0, title, href, t)
mysql.insert('insert into may_hlinkurl (apid,pid,title,href,time) values(%s,%s,%s,%s,%s)',value)
这两个在执行的时候都会返回报错信息
数据库插入错误:(1062, "Duplicate entry 'dcf6427011300a826fa0f3de9b1a6922' for key 'only'")
不同的是:
一、会在报错出现之后不执行后面数据的入库操作
二、会在报错之后后面的数据依旧可以入库
那么问题又来了,批量插入数据的时候如何保证它的唯一性并且能把其他的数据插入数据库