Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38691
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-23 14:14
文章分类

全部博文(28)

文章存档

2014年(1)

2013年(27)

我的朋友

分类: Python/Ruby

2013-11-26 02:09:02

原文地址:Python之MySQL操作 作者:scq2099yt

        对于MySQL操作,Python提供了第三方模块MySQL-python,本文介绍如何应用这个模块进行最基本的MySQL操作。
一、安装
1、安装setuptools-0.6c11
        #wget --no-check-certificate  
        #tar zxf setuptools-0.6c11.tar.gz && cd setuptools-0.6c11
        #python setup.py build
        #python setup.py install
2、安装MySQL-python-1.2.3
        #wget
        #tar zxf MySQL-python-1.2.3.tar.gz && cd MySQL-python-1.2.3
        #python setup.py build
        #python setup.py install
        需要注意的是:如果在执行python setup.py build时,出现EnvironmentError: mysql_config not found错误,则先查找mysql_config的位置,可以使用find / -name mysql_config来查找,比如/usr/local/mysql/bin/mysql_config,然后修改MySQL-python-1.2.3目录下的site.cfg文件,去掉mysql_config=XXX这行的注释,并改成mysql_config=/usr/local/mysql/bin/mysql_config,修改完后再次执行上面最后两步的build和install命令即可。
        如果上面方式不能安装,也可以从下载安装包,还可以直接yum install MySQL-python来安装。

二、应用
        下面用代码介绍基本数据库操作:
        #vi test_mysql.py
        #-*- encoding: gb2312 -*-
        import os, sys, string
        import MySQLdb
        # 连接数据库 
        try:
            #conn = MySQLdb.connect(host='localhost', user='root', passwd='xxxx', db='py_test_db',charset='utf8') 
            #conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx',db='py_test_db')
            conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx')
        except Exception, e:
            print e
            sys.exit()
        # 获取cursor对象来进行操作
        cur = conn.cursor()
        # 创建数据库
        cur.execute('create database if not exists py_test_db')
        conn.select_db('py_test_db')
        # 创建表
        sql = "create table if not exists test(name varchar(128) primary key, age int(4))"
        cur.execute(sql)
        # 插入一条记录
        sql = "insert into test(name, age) values ('%s', %d)" % ("scq", 30)
        try:
            cur.execute(sql)
            conn.commit()
        except Exception, e:
            print e
        # 插入多条记录
        # 1
        sql = "insert into test(name, age) values (%s, %s)"
        val = (("李四", 24), ("王五", 25), ("洪六", 26))
        try:
            cur.executemany(sql, val)
            conn.commit()
        except Exception, e:
            print e
        # 2
        values=[]
        for i in range(20):
            values.append(('Tom'+str(i)), i)
        try:
            cur.executemany('insert into test values(%s, %s)', values)
            conn.commit()
        except MySQLdb.Error,e:
            print "Mysql Error %d: %s" % (e.args[0], e.args[1])
        # 查询记录
        try:
            # 1 返回一条记录
            sql = "select * from test"
            count = cur.execute(sql)
            print 'there has %s rows record' % count
            result = cur.fetchone()
            print result
            print 'Name: %s Age: %s' % result
            # 2 返回多条记录
            results=cur.fetchmany(5)
            for r in results:
                print r
            # 3 返回所有记录
            results=cur.fetchall()
            for r in results:
                print r[1]
        except MySQLdb.Error,e:
            print "Mysql Error %d: %s" % (e.args[0], e.args[1])
        # 释放资源
        cur.close()
        conn.close()

三、接口
        下面是常用的接口函数:
1、事务接口
        下面接口由connect对象调用执行:
        (1)commit()
        提交
        (2)rollback()
        回滚
2、执行接口
        下面接口由cursor调用执行:
        (1)callproc(self, procname, args)
        用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数。
        (2)execute(self, query, args)
        执行单条sql语句,接收的参数为SQL语句本身和使用的参数列表,返回值为受影响的行数。
        (3)executemany(self, query, args)
        执行单挑SQL语句,但是重复执行参数列表里的参数,返回值为受影响的行数。
        (4)nextset(self)
        移动到下一个结果集。
3、接收接口
        下面接口由cursor调用执行:
        (1)fetchall(self)
        接收全部的返回结果行。
        (2)fetchmany(self, size=None)
        接收size条返回结果行,如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据。
        (3)fetchone(self)
        返回一条结果行。
        (4)scroll(self, value, mode='relative')
        移动指针到某一行,如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条。


阅读(380) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~