免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3085 | 回复: 0
打印 上一主题 下一主题

ubuntu11.10下面安装python中的MySQLdb模块教程(python2.7 mysql5.1) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-02 11:18 |只看该作者 |倒序浏览
以前做项目的时候,主要是用hadoop来跑实验挖掘日志,线下再用awk来提取关键信息做图表来汇报,当时数据量比较少,直接用shell拼sql来记录,一天记录的最终结果比较少,没怎么想过效率。直到某天需求急剧上升,一天需要存储千万级别的行的时候才发现速度上的悲剧。请教了同事以后,发现同事用的python模块来批量操作。自己拷过来测了一下速度,顿时就湿了,速度比我的快了不止100倍...shell是每操作一行都重建下连接,用python写的时候先开链接,再批量操作,最后关闭流。效率不言而喻。

      后来开发测试的时候发现了mysql的一些配置上的失误,mysql里面数据量很大的话,安装的时候一定要注意,默认安装会安装在/usr/bin/mysql下面,这个当时自己发现是在交换分区的,而且数据文件也是放在交换分区的,一天导入4000W的行基本上有6G左右,线下测试的第二天才发现这个问题。还有,表和表相互做笛卡尔乘积的时候是需要交换空间的,以前也出现过应为交换区空间太小sql报错的情况,这个时候在/home下面新建个tmp,再把交换空间里面的tmp软链接过去就OK了

      后来项目上线,在同事的帮助下给OP写了一份可以一次性安装好mysql以及配置以及python的MySQLdb库的脚本,今天在自己的ubuntu11.10下面用这个安装的时候发现一直报错,昨晚弄了一个晚上,想了想估计是redhat和ubuntu不同导致的。于是今天上午重新弄了下:

       1 如果因为不会安装mysql导致登陆不上mysql或者因为XXlock之类的错误的话,可以先用ps -aux | grep "mysql"看看有没有已安装的版本,把服务先停了。在按照:

           sudo apt-get autoremove --purge mysql-server-5.0
           sudo apt-get remove mysql-server
           sudo apt-get autoremove mysql-server
           sudo apt-get remove mysql-common (非常重要)

           来卸载

      2 安装mysql。最简洁的方法就是 sudo apt-get install mysql-server。安装的过程中会要求配置root账号和密码。这么安装后mysql就基本上可以用了,但是在/usr/bin/下面会缺少mysql_config文件,后面安装MySQLdb的时候会报错找不到文件。再安装两个包就行了:sudo apt-get install mysql-client 和sudo apt-get install libmysqlclient-dev。

      3 下载对应的setuptools-0.6c11-py2.7.egg。ubuntu11.10里面默认安装的python是2.7的,所以要下载对应2.7版本的http://pypi.python.org/packages/ ... ls-0.6c11-py2.7.egg。下载后chmod +x 添加可执行权限再sudo ./setuptools-0.6c11-py2.7.egg执行下。

      4 我自己安装的MySQLdb是MySQL-python-1.2.3版本的,这个网上很多下载。解压后首先修改site.cfg文件               

         embedded = False

         threadsafe = False

         static = False

         mysql_config = /usr/bin/mysql_config

         这么修改就OK了。

      5 在文件夹下面执行sudo python setup.py build和sudo python setup.py install。这个时候可能会报错,出现pymemcompat.h:10: fatal error: Python.h: 没有那个文件或目录。这个时候只需要sudo apt-get install python-dev安装下环境就OK了,在重复5

      6 测试。直接python命令进去import MySQLdb看报错与否,不报错就是正常了。附一点测试代码:

        

import os, sys, string
import MySQLdb

# 连接数据库 
try:
conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx',db='test1')
except Exception, e:
print e
sys.exit()

# 获取cursor对象来进行操作

cursor = conn.cursor()
# 创建表
sql = "create table if not exists test1(name varchar(12 primary key, age int(4))"
cursor.execute(sql)
# 插入数据
sql = "insert into test1(name, age) values ('%s', %d)" % ("zhaowei", 23)
try:
cursor.execute(sql)
except Exception, e:
print e

sql = "insert into test1(name, age) values ('%s', %d)" % ("张三", 21)
try:
cursor.execute(sql)
except Exception, e:
print e
# 插入多条

sql = "insert into test1(name, age) values (%s, %s)"
val = (("李四", 24), ("王五", 25), ("洪六", 26))
try:
cursor.executemany(sql, val)
except Exception, e:
print e

#查询出数据
sql = "select * from test1"
cursor.execute(sql)
alldata = cursor.fetchall()
# 如果有数据返回,就循环输出, alldata是有个二维的列表
if alldata:
for rec in alldata:
print rec[0], rec[1]


cursor.close()

conn.close()
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP