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. docker start -a dockername 老是卡住,什么情况?2. dockerfile - [docker build image失败- npm install]3. 老师,CSS3里面,选择一个DIV,这个DIV是以什么为原点进行旋转的啊?4. angular.js - 使用angular-xeditable报错5. 数据库设计 - Binary Allow Null Default mysql数据库字段属性问题 ?6. angular.js - 我用ng-repeat出来的数据为什么在IE11中只显示{{week}}?7. java - jstl中c标签无法解析报错如何解决8. mysql每隔10来秒就有一次7、8MB的写入9. php laravel框架模型作用域10. PHP中的$this代表当前的类还是方法?