python连接mysql数据库

先声明一下,我用的Python2.7版本,mysql版本是5.7。python不仅仅可以连接mysql,其他的一些数据库只要有接口都可以连接。首先如果我们要连接mysql,要下载安装一个模块MySQLdb,这个是我的百度云地址,密码是0kf5。根据自己的情况下载,我是用的win10,64位,python2.7,所以下载的是 MySQL-python-1.2.3.win-amd64-py2.7.exe,下载后双击安装,它会自动识别你的Python路径,安装很方便。

安装好以后,我们测试一下是否成功!

>>>import MySQLdb
>>>

没有出现什么提示就代表安装成功。下面我们看下Python如何连接mysql的,以及如何进行增删改查。先看下Python连接数据库的流程:
这里写图片描述

通过代码,我们一起来学习python连接mysql的过程。首先在我的数据库中有一个名字为s的表,结构如下:
这里写图片描述

表内容如下:

这里写图片描述

现在我们来看下如何操作!

1. 查询

import MySQLdb

#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)

#获取cursor
cur=conn.cursor()

#创建sql语句
sql="select * from s"

#执行sql语句
#这里的a返回的是结果有多少行,执行这条语句后游标在第一条结果前。
a=cur.execute(sql)

#执行完以后开始处理结果,循环输出。
for i in range(a):
    result=cur.fetchone()#这里的fetchone()方法是一次获取一行结果,游标移动一次,返回的result是个元组。
    print result[0],result[1],result[2],result[3],type(result)

#关闭连接对象
cur.close()
conn.close()

输出:
0 张康 男 24 <type 'tuple'>
1 小明 男 22 <type 'tuple'>
2 小王 女 21 <type 'tuple'>

能不能一次获取全部的查询结果呢,当然可以,看下面的操作。

import MySQLdb

#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)

#获取cursor
cur=conn.cursor()

#执行查询
sql="select * from s"
cur.execute(sql)

#获取全部查询结果
result=cur.fetchall()

#输出结果
print type(result),len(result)
print result[0][0],result[0][1],result[0][2],result[0][3]
print result[1][0],result[1][1],result[1][2],result[1][3]
print result[2][0],result[2][1],result[2][2],result[2][3]

#关闭连接对象
cur.close()
conn.close()

输出:
<type 'tuple'> 3
0 张康 男 24
1 小明 男 22
2 小王 女 21

表s中一共3行数据,所以查询结果result的长度为3,result本身就是一个元组,它的每个元素也是一个元组,每个元素就是s表中的一行数据组成的元组。fetchall()方法会获取所有查询结果,而fetchone()方法是获取一行,一个是all,一个是one。

2. 修改

import MySQLdb

#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)

#获取cursor
cur=conn.cursor()

#执行sql语句
sql="update s set sex='男',age=18 where name='小王'"
cur.execute(sql)

#提交更新
conn.commit()

#关闭连接对象
cur.close()
conn.close()

这个时候再来看看结果!发现小王那一行已经修改成功了

这里写图片描述

我们接下来看看另一种修改的形式。

import MySQLdb

#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)

#获取cursor
cur=conn.cursor()

#执行sql语句,这里有点小变化
sex_="女"
age_=20
name_="小王"

sql="update s set sex='%s',age='%s' where name='%s'" % (sex_,age_,name_)
cur.execute(sql)

#提交更新
conn.commit()

#关闭连接对象
cur.close()
conn.close()

确实和第一次的修改方式不太一样,我们使用了字符串的格式化。有人可能注意到age=‘%s’,为什么不用%d或者%i,其实你换成%d或者%i也行,但是我们最好是都用%s,省的考虑数据类型了,还有一点要注意的是%s外面有一对单引号。

现在我们看下另一种更加炫酷的修改方法!

import MySQLdb

#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)

#获取cursor
cur=conn.cursor()

#执行sql语句
ls=["男",123,"小王"]
sql="update s set sex=%s,age=%s where name=%s"

cur.execute(sql,ls)

#提交更新
conn.commit()

#关闭连接对象
cur.close()
conn.close()

先来找找这个方法和上面的区别,首先%s外面没有单引号了,其次也没有用到字符串格式化形式,而且execute()方法多了个参数。我想说几点:

  • ls可以是元组或者列表
  • 这里的占位符必须是%s,不管什么类型,换成其他的程序报错!
  • ls中每个元素按照顺序对应%s的内容

关于修改部分就说这么多,现在看下如何插入和删除!

3. 删除

import MySQLdb
#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)
#获取cursor
cur=conn.cursor()

#删除一行
sql="delete from s where name='小王'"
cur.execute(sql)

#提交更新
conn.commit()
#关闭连接对象
cur.close()
conn.close()

小王那一行已被删除!

4. 插入

关于插入有好几种形式,先看个最一般的:

import MySQLdb
#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)
#获取cursor
cur=conn.cursor()

sql="insert into s values(2,'赵四','男',20) "
cur.execute(sql)

#提交更新
conn.commit()
#关闭连接对象
cur.close()
conn.close()

这里写图片描述

这个很好理解,看下另一种形式:

import MySQLdb
#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)
#获取cursor
cur=conn.cursor()

sql="insert into s values(%s,%s,%s,%s)"
ls1=[3,'李三','男',15]
ls2=(4,'刘六','女',17)
cur.execute(sql,ls1)
cur.execute(sql,ls2)

#提交更新
conn.commit()
#关闭连接对象
cur.close()
conn.close()

这里写图片描述

这里要注意,占位符必须是%s,而且它外面没有单引号。ls1和ls2可以是列表或者元组,和上面讲的那个炫酷的修改方式是一样的。有人可能会说这些写有点麻烦,还要执行两次sql语句,如果要添加100行数据,岂不是要执行100次,现在我们来看一个终极无敌的方法。

import MySQLdb
#创建连接
conn=MySQLdb.Connect(
    host='localhost', #主机名
    port=3306,        #端口号(默认的)
    user='zhangkang',  #用户名
    passwd='123456',   #密码
    db='zhangkangdb',  #数据库名
    charset='utf8', #这里设置编码是为了输出中文
)
#获取cursor
cur=conn.cursor()

sql="insert into s values(%s,%s,%s,%s)"
ls1=[5,'李1','女',15]
ls2=(6,'李2','女',15)
ls3=[7,'李3','女',15]
ls=[ls1,ls2,ls3]
cur.executemany(sql,ls)

#提交更新
conn.commit()
#关闭连接对象
cur.close()
conn.close()

这里写图片描述

这里我们使用的是executemany()方法,顾名思义,它就是为执行多条sql语句而准备的,ls可以是元组或者列表,ls中的每个元素作为参数组执行一次sql语句。

posted @ 2017-07-01 16:40  neu_张康  阅读(171)  评论(0编辑  收藏  举报