zoukankan      html  css  js  c++  java
  • 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语句。

  • 相关阅读:
    Cookie、Session和自定义分页
    logstash 运行
    php json数据保留原样中文
    linux 32位还是64位
    php之isset 与 empty 区别
    php 订单
    个人分类
    laravel 创建自己的函数
    lumen框架导入数据异常
    yum安装samba服务器的安装
  • 原文地址:https://www.cnblogs.com/neuzk/p/9476433.html
Copyright © 2011-2022 走看看