python下的MySQLdb使用

参考:http://www.iteye.com/topic/573092

            http://drizzlewalk.blog.51cto.com/2203401/448874

            http://blog.csdn.net/foyuan/article/details/1711100

平时的主要编程语言是C,开发时也主要用Mysql,经常为了测试,调试的目的需要操作数据库,比如备份,插入测试数据,修改测试数据,有些时候不能简单的用SQL就能完成任务,或都很好的完成任务,用C写又有点太麻烦了,就想到了Python。Python语法简洁,不用编译,可以经较好的完成任务。今天看了下Python对Mysql的操作,做一下记录。

 

下载安装MySQLdb

首先,安装需要的环境,Mysql和Python就不说了,必备的东西。

主要是安装的MySQLdb,可以去sf.net下载,具体地址是http://sourceforge.net/projects/mysql-python/

如果用Ubuntu,直接

 

sudo apt-get install python-mysqldb

 


<1>linux版本

http://sourceforge.net/projects/mysql-python/ 下载,在安装是要先安装setuptools,然后在下载文件目录下,修改mysite.cfg,指定本地mysql的mysql-config文件的路径

<2>windows版本

网上搜索到一个http://www.technicalbard.com/files/MySQL-python-1.2.2.win32-py2.6.exe

安装后import MySQLdb会出现 DeprecationWarning: the sets module is deprecated 这样一个警告,google之

原因是2.6不知sets这个模块,不过已经添加了set内置函数。找到MySQLdb文件夹的中__init__.py,注释掉from sets import ImmutableSet   class DBAPISet(ImmutableSet):添加class DBAPISet(frozenset):;找到converters.py注释掉from sets import BaseSet, Set。然后修改第45行和129行中的Set为set。

搞定。

安装完成之后可以在Python解释器中测试一下

输入

Python代码  
import MySQLdb #注意大小写!!
如果不报错,就证明安装成功了,可能继续了


MySQLdb在Python中也就相当于JAVA中的MySQL的JDBC Driver,Python也有类似的数据接口规范Python DB API,MySQLdb就是Mysql的实现。操作也比较简单和其它平台或语言操作数据库一样,就是建立和数据库系统的连接,然后给数据库输入SQL,再从数据库获取结果。

简单介绍:

模块功能:connect()方法
        * connect()方法用于连接数据库,返回一个数据库连接对象。如果要连接一个位于host.remote.com服务器上名为fourm的MySQL数据库,连接串可以这样写:
        db = MySQLdb.connect(host="remote.com",user="user",passwd="xxx",db="fourm" )
connect()的参数列表如下:
        host,连接的数据库服务器主机名,默认为本地主机(localhost)。   
        user,连接数据库的用户名,默认为当前用户。
        passwd,连接密码,没有默认值。
        db,连接的数据库名,没有默认值。
        conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions
        cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。
        compress,启用协议压缩功能。
        named_pipe,在windows中,与一个命名管道相连接。
        init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。              
        read_default_file,使用指定的MySQL配置文件。
        read_default_group,读取的默认组。
        unix_socket,在unix中,连接使用的套接字,默认使用TCP。
        port,指定数据库服务器的连接端口,默认是3306。

* 连接对象的db.close()方法可关闭数据库连接,并释放相关资源。
* 连接对象的db.cursor([cursorClass])方法返回一个指针对象,用于访问和操作数据库中的数据。
* 连接对象的db.begin()方法用于开始一个事务,如果数据库的AUTOCOMMIT已经开启就关闭它,直到事务调用commit()和rollback()结束。
*连接对象的db.commit()和db.rollback()方法分别表示事务提交和回退。
*指针对象的cursor.close()方法关闭指针并释放相关资源。
*指针对象的cursor.execute(query[,parameters])方法执行数据库查询。
*指针对象的cursor.fetchall()可取出指针结果集中的所有行,返回的结果集一个元组(tuples)。
*指针对象的cursor.fetchmany([size=cursor.arraysize])从查询结果集中取出多行,我们可利用可选的参数指定取出的行数。
*指针对象的cursor.fetchone()从查询结果集中返回下一行。
*指针对象的cursor.arraysize属性指定由cursor.fetchmany()方法返回行的数目,影响fetchall()的性能,默认值为1。
*指针对象的cursor.rowcount属性指出上次查询或更新所发生行数。-1表示还没开始查询或没有查询到数据。

先写一个最简单的,创建一个数据库:

 

#!/usr/bin/env python
#coding=utf-8
###################################
# @author migle
# @date 2010-01-17
##################################
#MySQLdb 示例
#
##################################
import MySQLdb

#建立和数据库系统的连接
conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')

#获取操作游标
cursor = conn.cursor()
#执行SQL,创建一个数据库.
cursor.execute("""create database python """)

#关闭连接,释放资源
cursor.close();

创建数据库,创建表,插入数据,插入多条数据

#!/usr/bin/env python
#coding=utf-8
###################################
# @author migle
# @date 2010-01-17
##################################
#MySQLdb 示例
#
##################################
import MySQLdb

#建立和数据库系统的连接
conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')

#获取操作游标
cursor = conn.cursor()
#执行SQL,创建一个数据库.
cursor.execute("""create database if not exists python""")

#选择数据库
conn.select_db('python');
#执行SQL,创建一个数据表.
cursor.execute("""create table test(id int, info varchar(100)) """)

value = [1,"inserted ?"];

#插入一条记录
cursor.execute("insert into test values(%s,%s)",value);

values=[]


#生成插入参数值
for i in range(20):
    values.append((i,'Hello mysqldb, I am recoder ' + str(i)))
#插入多条记录

cursor.executemany("""insert into test values(%s,%s) """,values);

#关闭连接,释放资源
cursor.close();

查询和插入的流程差不多,只是多了一个得到查询结果的步骤

#!/usr/bin/env python
#coding=utf-8
######################################
#
# @author migle
# @date 2010-01-17
#
######################################
#
# MySQLdb 查询
#
#######################################

import MySQLdb

conn = MySQLdb.connect(host='localhost', user='root', passwd='longforfreedom',db='python')

cursor = conn.cursor()

count = cursor.execute('select * from test')

print '总共有 %s 条记录',count

#获取一条记录,每条记录做为一个元组返回
print "只获取一条记录:"
result = cursor.fetchone();
print result
#print 'ID: %s   info: %s' % (result[0],result[1])
print 'ID: %s   info: %s' % result 

#获取5条记录,注意由于之前执行有了fetchone(),所以游标已经指到第二条记录了,也就是从第二条开始的所有记录
print "只获取5条记录:"
results = cursor.fetchmany(5)
for r in results:
    print r

print "获取所有结果:"
#重置游标位置,0,为偏移量,mode=absolute | relative,默认为relative,
cursor.scroll(0,mode='absolute')
#获取所有结果
results = cursor.fetchall()
for r in results:
    print r
conn.close()

查询后中文会正确显示,但在数据库中却是乱码的。经过我从网上查找,发现用一个属性有可搞定:

在Python代码 

conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python') 中加一个属性:
 改为:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8') 
charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset='gb2312'。


 

Python操作MySQL以及中文乱码的问题 

Python操作MySQL需要安装Python-MySQL
可以从网上搜索一下,和一般的Python包一样安装

安装好之后,模块名字叫做MySQLdb ,在Window和Linux环境下都可以使用,试验了一下挺好用,
不过又发现了烦人的乱麻问题,最后用了几个办法,解决了!

我用了下面几个措施,保证MySQL的输出没有乱麻:
    1 Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)
    2 MySQL数据库charset=utf-8
    3 Python连接MySQL是加上参数 charset=utf8
    4 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)

mysql_test.py
   
# encoding=utf-8
import  sys
import  MySQLdb

reload(sys)
sys.setdefaultencoding(
' utf-8 ' )

db
= MySQLdb.connect(user = ' root ' ,charset = ' utf8 ' )
cur
= db.cursor()
cur.execute(
' use mydb ' )
cur.execute(
' select * from mytb limit 100 ' )

f
= file( " /home/user/work/tem.txt " , ' w ' )

for  i  in  cur.fetchall():
    f.write(str(i))
    f.write(
" " )

f.close()
cur.close()

上面是linux上的脚本,windows下运行正常!

注:MySQL的配置文件设置也必须配置成utf8

设置 MySQL 的 my.cnf 文件,在 [client]/[mysqld]部分都设置默认的字符集(通常在/etc/mysql/my.cnf):
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值