文档章节

Python 频繁读取Mysql相关问题

92自由
 92自由
发布于 2015/01/20 09:36
字数 426
阅读 9
收藏 0

1、需要频繁select大量数据,时间长、消耗内存大,如何解决mysql性能问题?

如果对返回的结果数量没有要求,可以控制返回的数量:

cursor.fetchmany(size=1000)

这样是只返回1000条数据,如果返回的结果小于size,则返回所有数据;

如果你只需要一条,则更简单:fetchone()

2、每次插入的数据过大,MySQL server has gone away 如何解决?

存储为blob类型;

修改my.conf里:max_allowed_packet = 500m

3、要把python的list类型存入mysql,然后下次还需要以list格式读取,如何操作?

因为list类型里包含半角的逗号,或插入的数据里包含特殊符号,则不能正常插入mysql。

Google里有很多方法,我采取的是base64。将要插入的数据base64 encode可以正常存入Mysql。

base64str = base64.b64encode(str(mysqlstr))

mysqlstr = base64.b64decode(b64str)

注意:当你读取的时候,需要base64decode,这时得到的是str,则不能正常使用list序列取值。怎么办?

eval(string)

如上操作,eval可以很好的解决这个问题,把str变成tuple,就可以直接用了。

4、频繁操作Mysql更删查数据时,最好采用多线程操作数据库,避免因为my.conf配置问题带来的麻烦。

下面是一个Mysql多线程操作类:

 1 class MYSQL:
 2     def __init__(self,sql):
 3         self.sql = sql
 4         self.conn = MySQLdb.connect(charset='utf8',user='yourname',passwd='passwd',db='your dbname')            
 5         self.cursor = self.conn.cursor()
 6  
 7     def insert(self):
 8         self.cursor.execute(self.sql)
 9         self.conn.commit()
10         self.cursor.close()
11         self.conn.close()
12         return True
13  
14     def select(self):
15         self.cursor.execute(self.sql)
16         alldata = self.cursor.fetchall()
17         self.cursor.close()
18         self.conn.close()
19         return alldata
20  
21     def update(self):
22         self.cursor.execute(self.sql)
23         self.conn.commit()
24         self.cursor.close()
25         self.conn.close()
26         return True

 

© 著作权归作者所有

92自由
粉丝 1
博文 55
码字总数 25852
作品 0
威海
程序员
私信 提问
使用 python 管理 mysql 开发工具箱 - 1

Mysql 是一个比较优秀的开源的数据库,很多公司都在使用。作为运维人员,经常做着一些重复性的工作,比如创建数据库实例,数据库备份等,完全都可以使用 python 编写一个工具来实现。 一、模...

肖邦0526
2016/12/26
0
0
FriendFeed如何用MySQL储存K-V数据

@这是一篇比较老的文章,我现在的理解是使用MySQL实现了一个MongoDB,在思路上有借鉴意义。 原文地址: http://backchannel.org/blog/friendfeed-schemaless-mysql 背景 我们使用MySQL储存Fri...

山哥
2014/10/23
529
0
Python3伪装浏览器爬虫读取网页内容

小弟最近学习Python,遇到解析HTML相关的,我突然就想到了Python,用Python实现应该不难吧,于是我开始试着用Python读取网页内容,不过过程有点纠结。 有些网站加了保护,CSDN、***、等等很多...

isaced
2013/01/30
4.2K
1
Ubuntu-14.04.1安装问题

安装MySQL Workbench sudo dpkg -i mysql-workbench-community-6.2.3-1ubu1404-amd64.deb (正在读取数据库 ... 系统当前共安装有 156278 个文件和目录。) Preparing to unpack mysql-workben......

時間會抹平那些皺褶遺
2014/11/12
2.3K
4
对比 HandlerSocket 和 Python 的 MySQL 客户端,性能相差近一倍

我最近做了一些性能测试,对比了两个Python的MySQL库的数据读取效率:MySQLdb和pyhs。MySQLdb使用了MySQL的客户端库,而pyth使用了HandlerSocket,跳过了MySQL的客户端这一层,直接和Innodb存...

虫虫
2011/12/22
2.6K
4

没有更多内容

加载失败,请刷新页面

加载更多

c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
30分钟前
45
0
Java中的面向对象

一、面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现。 对象就是将函数,属性的一种封装。用人们思考习惯的方式思考问题。 如何自定义类 修饰符 类名{ //成...

zhiruochujian
39分钟前
3
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
41分钟前
36
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
54分钟前
23
0
Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
59分钟前
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部