mysql - 数据库插入频繁导致数据丢失
问题描述
插入语句有两条,循环插入这两条只是简单写了下插入语句,没有捕捉到异常
def process_item(self, item, spider):#print(item)try: with self.connection.cursor() as cursor:#Create a new recordsql1 = 'INSERT INTO staff (XNXQ, department, teacher, gender, title, note1, note2) VALUES (%s, %s, %s, %s, %s, %s, %s)'cursor.execute(sql1, (item[’first’][’XNXQ’], item[’first’][’department’], item[’first’][’teacher’], item[’first’][’gender’], item[’first’][’title’], item[’first’][’note1’], item[’first’][’note2’]))self.connection.commit()#Create a new recordcursor.execute('select max(id) from staff')teacherId = cursor.fetchone()[’max(id)’]print(’teacherId:’ + str(teacherId))print(item[’second’]) sql2 = 'INSERT INTO staffCourse (teacherId, snum, course, credit, teachWay, courseType, classNum, className, stuNum, week, section, location) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'cursor.execute(sql2, (teacherId, item[’second’][’snum’], item[’second’][’course’], item[’second’][’credit’], item[’second’][’teachWay’], item[’second’][’courseType’], item[’second’][’classNum’], item[’second’][’className’], item[’second’][’stuNum’], item[’second’][’week’], item[’second’][’section’], item[’second’][’location’]))self.connection.commit()except Exception as e: print(’------------------------------------------’) print(e)
查看数据库时,发现少了很多,我猜应该是频繁插入导致数据丢失的,因为我在插入数据库之前把数据print了一下,没少。怎么解决这个问题?
问题解答
回答1:你是不是一次性循环了很多次啊如果我没记错的话。数据库有个队列缓存的,如果一下子塞入太多数据占满了缓存,就会产生丢失的现象如果有大量数据要插入的话,就要自己实现队列,然后定时插入
或者试试事务
回答2:由于看不懂python语法,仅从sql的角度来提供2种解决方法:1、用事务的方式去进行写入数据,每1000条数据提交一次,例如:
fake code
for data.size BEGINfor 1000 INSERT INTO ...end COMMITend
2、将sql改成批量写入,性能有不少提高
INSERT INTO (...)VALUES (...),(...),(...),(...);回答3:
可以看下数据库日志,看下执行记录。
回答4:你虽然代码里面写了insert之后,commit。但是在什么时候提交,是在你的项目中的事务中控制的,而不是你在这里控制的,项目中可能从切面做了事务的控制。解决方案:1.分页插,配置事务,不要一次性插入,分批插入,分批commit数据。
相关文章:
1. css - chrome浏览器input记录上次cookie信息后,有个黄色背景~如何去除!2. 请教,关于python字典,合并相同值的键的实现方法3. javascript - 如何将 windows 下编辑器中的 CRLF 替换为 LF?4. android - 京东移动端网页和其app加载的url所做的呈现不应该是完全一样的吗?5. mysql5.7就没有官方性质的详细配置文件吗?求大神告知6. Windows系统能否利用Docker使用Ubuntu吗?Ubuntu能使用本机的显卡吗?7. javascript - 求解答:实例对象调用constructor,此时constructor内的this的指向?8. html5 - 在一个页面中 初始了两个swiper 不知道哪里错了 一直不对9. css3中translate(-50%,-50%)对 transform-origin的奇葩影响?10. python的MySQLdb库中的executemany方法如何改变默认加上的单引号?

网公网安备