python MySQLdb学习笔记
2012-04-09 16:58
330 查看
MySQLdb库是Python访问MySql的连接库,最近项目中需要使用,将学习使用所得整理如下。
由于我是windows环境,安装很简单,到这里下载一个.windows环境下载exe版本,直接双击安装很方便.
MySQLdb用户指南 MySQLdb文档
言归正传,如何使用MySQLdb呢,其实和Python内置的sqlite3的使用方法基本相同,简单说就是以下四个步骤:
建立数据库连接,取得Cursor对象
执行sql语句,接收返回值
根据执行情况,提交或者回滚数据库。
关闭Cursor,关闭数据库连接
1,引入MySQLdb库[b]建立和数据库的连接[/b]
参数定义:
host:数据库主机名.默认是用本地主机.
user:数据库登陆名.默认是当前用户.
passwd:数据库登陆的秘密.默认为空.
db:要使用的数据库名.没有默认值.
port:MySQL服务使用的TCP端口.默认是3306.
连接对象提供了对事务操作的支持:commit()和rollback()
2,执行sql语句和接收返回值
callproc(self, procname, args):执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.
下面是具体进行数据库操作的示意代码:
插入数据:
查询数据:
#实际数据形式应该是这样的:((1,'zhang',25,'male','123'),(2,'wang',28,'male','1123'))
批量插入数据:
3,根据执行情况,提交或者回滚数据库:
conn.commit()
4,关闭数据库连接
首先关闭Cursor对象,然后是连接对象:
cursor.close()
conn.close()
另,MySQLdb默认情况下,查询结果行都是返回tuple,访问的时候不是很方便,必须按照0,1这样读取。以前使用sqllite3的时候,可以修改过Connection对象的row_factory属性,以便使用sqlite3.Row,这样结果集中的数据行就是字典形式的,可以用字段名访问,那么MySQLdb中是不是也有这样的方法呢,经过在网上搜索发现,MySQLdb中有DictCursor,要做到这点也很简单,那就是建立数据库连接是传递cusorclass参数,或者在获取Cursor对象时传递cusorclass参数即可:
或者
然后我们上面例子中的查询结果就会变成下面这个样子的:
({id:1,name:'zhang',age:25,sex:'male',password:'123'}.....)
由于我是windows环境,安装很简单,到这里下载一个.windows环境下载exe版本,直接双击安装很方便.
MySQLdb windows下运行需要 libmySQL.dll、libmmd.dll 和 libguide40.dll ,可以放在sitepackage下也可以在windows\system32\学习MySQLdb的使用,下面的文档必不可少:
MySQLdb用户指南 MySQLdb文档
言归正传,如何使用MySQLdb呢,其实和Python内置的sqlite3的使用方法基本相同,简单说就是以下四个步骤:
建立数据库连接,取得Cursor对象
执行sql语句,接收返回值
根据执行情况,提交或者回滚数据库。
关闭Cursor,关闭数据库连接
1,引入MySQLdb库[b]建立和数据库的连接[/b]
import MySQLdb conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="appdb")
参数定义:
host:数据库主机名.默认是用本地主机.
user:数据库登陆名.默认是当前用户.
passwd:数据库登陆的秘密.默认为空.
db:要使用的数据库名.没有默认值.
port:MySQL服务使用的TCP端口.默认是3306.
连接对象提供了对事务操作的支持:commit()和rollback()
2,执行sql语句和接收返回值
cursor=conn.cursor() n=cursor.execute(sql,param)建立建立连接后,首先就要获取一个Cursor对象,因为以后的数据库操作都要通过它来进行。那么Cursor对象都有哪些方法呢?Cursor对象的主要有以下方法:
callproc(self, procname, args):执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.
下面是具体进行数据库操作的示意代码:
插入数据:
#使用sql语句,这里要接收的参数用%s表示,它就是一个占位符,无论代表的数据是什么类型,都用%s来表示 sql="insert into operator values(%s,%s,%s,%s,%s)" #参数应该为tuple或者list ps=(id,name,age,sex,password) #执行,如果成功,n的值为1 n=cursor.execute(sql,ps)
查询数据:
cursor.execute("select * from operator") #fetchall方法返回的全部结果.每条结果都是一个tuple类型的数据,rs就是tuple组成的tuple rs=cursor.fetchall() #可以这样使用结果集 print rs[0][3] #或者直接显示出来,看看结果集的真实样子 print rs
#实际数据形式应该是这样的:((1,'zhang',25,'male','123'),(2,'wang',28,'male','1123'))
批量插入数据:
sql="insert into operator values(%s,%s,%s,%s,%s)" #参数同样需要一个tuple组成的tuple,当然tuple组成的list也是可以的 ps=((1,'zhang',25,'male','123'),(2,'wangxia',28,'female','1123')) #使用executemany方法来批量的插入数据。 n=cursor.executemany(sql,ps)
3,根据执行情况,提交或者回滚数据库:
conn.commit()
4,关闭数据库连接
首先关闭Cursor对象,然后是连接对象:
cursor.close()
conn.close()
另,MySQLdb默认情况下,查询结果行都是返回tuple,访问的时候不是很方便,必须按照0,1这样读取。以前使用sqllite3的时候,可以修改过Connection对象的row_factory属性,以便使用sqlite3.Row,这样结果集中的数据行就是字典形式的,可以用字段名访问,那么MySQLdb中是不是也有这样的方法呢,经过在网上搜索发现,MySQLdb中有DictCursor,要做到这点也很简单,那就是建立数据库连接是传递cusorclass参数,或者在获取Cursor对象时传递cusorclass参数即可:
import MySQLdb import MySQLdb.cursors conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="appdb",cursorclass=MySQLdb.cursors.DictCursor) cursor=conn.cursor();
或者
import MySQLdb import MySQLdb.cursors conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="appdb") cursor=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor);
然后我们上面例子中的查询结果就会变成下面这个样子的:
({id:1,name:'zhang',age:25,sex:'male',password:'123'}.....)
相关文章推荐
- python学习笔记:MySQLdb中的connect
- python学习笔记 安装MySQLdb,连接mysql数据库
- python学习笔记(mysqldb下载安装及简单操作)
- python学习笔记:MySQLdb
- python MySQLdb学习笔记
- python学习笔记之——python安装mysqldb后,pycharm导入还是报错问题
- 【Python学习笔记】-利用MySQLdb操作mysql数据库
- Python爬虫学习笔记--MySQLdb模块
- python学习笔记-Day11-- MySQLdb
- python学习笔记 第五章
- python学习笔记——异常
- python学习笔记(03):函数
- 基于python语言:Opencv3实例学习笔记1
- python 学习笔记 5 -- 文件输入输出
- Python第二周 学习笔记(1)
- Python学习笔记1:序列类型详解
- python pandas学习笔记
- python 核心编程学习笔记(第3章) 对应Let's-python视频第4集
- Python学习笔记(5)
- Python源码学习笔记(1 基本数据类型)