博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python连接mysql数据库
阅读量:5286 次
发布时间:2019-06-14

本文共 5098 字,大约阅读时间需要 16 分钟。

先声明一下,我用的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', #这里设置编码是为了输出中文)#获取cursorcur=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 
1 小明 男 22
2 小王 女 21

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

import MySQLdb#创建连接conn=MySQLdb.Connect(    host='localhost', #主机名    port=3306,        #端口号(默认的)    user='zhangkang',  #用户名    passwd='123456',   #密码    db='zhangkangdb',  #数据库名    charset='utf8', #这里设置编码是为了输出中文)#获取cursorcur=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()输出:
30 张康 男 241 小明 男 222 小王 女 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', #这里设置编码是为了输出中文)#获取cursorcur=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', #这里设置编码是为了输出中文)#获取cursorcur=conn.cursor()#执行sql语句,这里有点小变化sex_="女"age_=20name_="小王"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', #这里设置编码是为了输出中文)#获取cursorcur=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', #这里设置编码是为了输出中文)#获取cursorcur=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', #这里设置编码是为了输出中文)#获取cursorcur=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', #这里设置编码是为了输出中文)#获取cursorcur=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', #这里设置编码是为了输出中文)#获取cursorcur=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语句。

转载于:https://www.cnblogs.com/neuzk/p/9476433.html

你可能感兴趣的文章
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
【京东咚咚架构演进】-- 好文收藏
查看>>
【HTML】网页中如何让DIV在网页滚动到特定位置时出现
查看>>
文件序列化
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>