python MySQLdb学习笔记

MySQLdb是Python访问MySql的连接库,最近项目中需要使用,将学习使用所得整理如下。

由于我是windows环境,安装很简单,到这里下载一个.windows环境下载exe版本,直接双击安装很方便.

MySQLdb windows下运行需要 libmySQL.dll、libmmd.dll 和 libguide40.dll ,可以放在sitepackage下也可以在windows\system32\ 
学习MySQLdb的使用,下面的文档必不可少:

MySQLdb用户指南 MySQLdb文档


言归正传,如何使用MySQLdb呢,其实和Python内置的sqlite3的使用方法基本相同,简单说就是以下四个步骤:
  1. 建立数据库连接,取得Cursor对象
  2. 执行sql语句,接收返回值
  3. 根据执行情况,提交或者回滚数据库。
  4. 关闭Cursor,关闭数据库连接
1,引入MySQLdb库建立和数据库的连接
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'}.....)

原文地址:https://www.cnblogs.com/dajianshi/p/2827104.html