python3.3操作MySQL数据库
2016-01-05 17:32
567 查看
在用python3.3操作MySQL数据库时把折腾的比较狠,好在通过大神的提点解决了。
有一些数据,这些数据是将整个网页以HTML存在数据库中的,我需要将它们取出来清洗然后再存回另外一个数据库。这时就出现了如下一些问题:
1. 数据量比较大,在数据小的时候可以直
2. 既然这种方法不可用,那就用
这样折腾下来总算解决了这个问题。最大收获是,理解了cursor,游标,顾名思义可以把它理解为指针或引用,这样就理解了为什么在一条SQL语句没有完全处理完转而去执行另一条SQL时会出现各种奇葩的错误了,比如
上述代码中的第12行中就是在查询语句执行后,跳转去执行插入语句,而后在第16行又执行查询语句,显然,这个过程中cursor的对象变了,不可能在接着第1行获取的五条数据后的第6条再次获取了。cursor对象对应执行的SQL语句完全乱了,最好的办法是重新为第6行插入操作定义一个新的游标。
有一些数据,这些数据是将整个网页以HTML存在数据库中的,我需要将它们取出来清洗然后再存回另外一个数据库。这时就出现了如下一些问题:
1. 数据量比较大,在数据小的时候可以直
fetchall然后再对数据进行修改,存入数据库,但是数据量大的时候就不行了,实验几次,每次都是在90000+的时候挂掉了,出的错误Google都找不到,
not enough parameters for SQL statement,明明之前的90000+的数据都可以,这就突然不可用了。郁闷。
2. 既然这种方法不可用,那就用
fetchmany取一点,处理一点,再存入数据库中,速度慢点,应该可以吧。可是问题又来了。首先是游标cursor,数据库中的游标是在内存中开辟的一块区域,是和SQL结果绑定的,如果先执行查询操作,中间执行插入操作,显然不能再回到之前的查询操作接着执行了,所以要为插入操作重新定义一个cursor。这样还不够,执行查询语句后如果不读取数据,在执行插入和更新操作时会提示
unread result found有未读结果,解决这个问题的办法stackflow上说定义cursor时设置
buffered = True这样数据就是直接读到buffer了。
这样折腾下来总算解决了这个问题。最大收获是,理解了cursor,游标,顾名思义可以把它理解为指针或引用,这样就理解了为什么在一条SQL语句没有完全处理完转而去执行另一条SQL时会出现各种奇葩的错误了,比如
query_result = cursor.fetchmany(5) while query_result: param = [] for row in query_result: row = list(row) user = row[3].decode().split("_", 1) row[5] = clear_data(row[5].decode()) data = row[0:3] + user + row[4:] param.append(data) #print(param) try: cursor.executemany(insert_data, param) con.commit() except mysql.connector.Error as connect_err: print("mysql Error(1):{}".format(connect_err.msg)) query_result = cursor.fetchmany(5)
上述代码中的第12行中就是在查询语句执行后,跳转去执行插入语句,而后在第16行又执行查询语句,显然,这个过程中cursor的对象变了,不可能在接着第1行获取的五条数据后的第6条再次获取了。cursor对象对应执行的SQL语句完全乱了,最好的办法是重新为第6行插入操作定义一个新的游标。
相关文章推荐
- python字符串连接方式(转)
- leetcode之3Sum Closest
- Python之NumPy实践之数组和矢量计算
- Python之NumPy实践之数组和矢量计算
- [python] Understanding Network Hacks with Python
- python 一个比较好的讲解beanstalkc模块的网站
- numpy 简记
- 基于Python的数据分析(1):配置安装环境
- 关于python中的IO流
- Python顺序与range和random
- python+interface testing 读写Excel需要的包
- python--list和tuple类型--2
- python 操作mysql数据库
- python的运算符重载
- python实例编写(7)---测试报告与测试套件(多个py文件,1个py文件内多个用例)
- python 数据类型之list
- python入门笔记(2)
- leetcode之3Sum
- Python学习笔记8-类的继承 、深度优先、广度优先
- Python学习笔记8-类的继承 、深度优先、广度优先