美文网首页SQL小小白
SQL入门系列(十):cursor游标

SQL入门系列(十):cursor游标

作者: 凡有言说 | 来源:发表于2020-01-20 00:32 被阅读0次

    在写SQL语句的时候通常是面向集合进行思考,我们更关注结果集,而不是具体的实现过程。但有时我们不需要对查询结果的所有数据行都采用相同的处理方式,而是每次处理一行或者部分行,此时就需要面向过程。游标就是这种编程方式的体现。

    游标提供了一种灵活的操作方式,可以让我们从数据结果集中每次提取一条数据记录进行操作。游标让SQL这种面向集合的语言有了面向过程的能力。

    游标是一种临时的数据库对象,可以指向存储在数据库表中的数据进行指针。此时游标充当了指针的作用,我们可以通过游标来对数据进行操作。

    我们以王者荣耀英雄数据为例:

    mysql> SELECT id, name, hp_max FROM heros WHERE hp_max > 8500;
    
    +-------+--------+--------+
    | id    | name   | hp_max |
    +-------+--------+--------+
    | 10007 | 程咬金 |   8611 |
    | 10008 | 廉颇   |   9328 |
    | 10012 | 白起   |   8638 |
    | 10015 | 刘禅   |   8581 |
    +-------+--------+--------+
    4 rows in set (0.05 sec)
    

    此时有4条返回结果,系统会一次性将4条记录返回到界面,无法进行其他操作。

    当我们开启了游标功能,再去执行这条语句时,系统会先找到这些行,并将其存放起来,然后提供一个游标接口。需要时就可以通过这个游标一行行地取出数据,每取出一条记录,游标指针就朝前移动一次,一直到取完最后一行数据为止。

    在使用Python连接数据库时,经常会用到游标功能。当我们使用Python连接MySQL时,Python相当于是MySQL服务器的一个客户端,我们是利用Python这个客户端去操作MySQL的服务器。即在Python中操作数据库,就是使用游标获取表中的数据。

    具体的步骤是:
    1.连接数据库,创建一个数据库对象

    #安装pymysql
    ! pip install pymysql
    
    #导入pymysql库
    import pymysql
    
    database_heros = pymysql.connect(host='localhost', user='root', db='heros',
                                    password='ilikesql', port=3306, charset='utf8')
    

    此时操作的是heros数据库中的表

    • host: 这个是ip地址,因为我这里是本地的,所以填127.0.0.1,也可以填localhost。
    • user:用户名,如果你也是本地的,就填root好了
    • passwd:填上设的密码就可以
    • db:这个是数据库名,这里选的是yibaidb数据库
    • port:这个是端口,本地的一般都是3306
    • charset:这个是编码方式,要和你数据库的编码方式一致,要不会连接失败

    2.创建游标对象,开启游标功能

    #创建游标对象
    cursor = database_heros.cursor()
    

    3.使用execute()方法,执行SQL语句

    #使用execute()方法,执行SQL语句
    cursor.execute('SELECT id, name, hp_max FROM heros WHERE hp_max > 8500')
    

    此时系统会根据SQL语句找到匹配行,然后存储起来,而不是一次性打印到屏幕上。当需要的时候,再去获取即可。

    4.获取结果集中的数据

    #一次性获取一条数据
    a = cursor.fetchone()
    print(a)
    
    (10007, '程咬金', 8611.0)
    
    #一次性获取全部数据
    b = cursor.fetchall()
    print(b)
    
    ((10008, '廉颇', 9328.0), (10012, '白起', 8638.0), (10015, '刘禅', 8581.0))
    

    5.断开数据库,释放资源

    #断开数据库,释放资源
    database_heros.close()
    

    参考资料:
    游标:当我们需要逐条处理数据时,该怎么做?
    通过cursor游标讲解,带你彻底搞懂python操作mysql数据库

    公众号.png

    相关文章

      网友评论

        本文标题:SQL入门系列(十):cursor游标

        本文链接:https://www.haomeiwen.com/subject/xvorzctx.html