zoukankan      html  css  js  c++  java
  • Python pymysql——Mysql数据库Python化操作

    前言

    Mysql数据库是目前较为流行使用的数据库之一,众多编程语言都有对其的支持扩展包接口,当然于python而言亦有专门扩展库以便帮助开发者对Mysql数据库进行相应的操作。其中,由于python版本不同,对Mysql支持的库也有区别,目前使用较为普遍的有pymysql和MySQLdb,两者功能上无明显差异,只是前者支持python3.X版本,后者应用于python2.X版本。

    在此以python3.X版本为平台基础,对pymysql的相关基础及使用方法作简单介绍。

    安装

    直接使用pip命令进行安装

    pip install pymysql

    概念基础

    在pymysql中(当然,其他SQL数据库接口也一样),主要有三个基本概念:连接对象、游标对象以及查询SQL select语句的结果。

    1)连接对象:代表一个到数据库的连接,它是提交和回滚操作的接口,提供了数据库软件包的细节信息,并能生成游标对象。

    2)游标对象:代表了需提交执行的SQL语句,同时它也可以被用来访问和遍历SQL语句的执行结果。

    3)查询SQL select语句的结果:SQL select语句的执行结果在python是一个嵌套的序列,它代表了数据库表中的行。

    使用方法

    1)初始化准备

    import pymysql
    
    # 初始化连接配置
    ConnectConfig = {
         'host': 'localhost',
         'port': 3306,
         'user': 'root',
         'passwd': '******',
         'charset': 'utf8',
         'db': 'tesdbt'
     }
    
    # 创建连接对象
    db = pymysql.connect(
         host=ConnectConfig['host'], 
         port=ConnectConfig['port'],
         user=ConnectConfig['user'],
         passwd=ConnectConfig['passwd'], 
         charset=ConnectConfig['charset'], 
         db=ConnectConfig['db']
     )
    
    # 创建游标对象
    cursor = db.cursor()

    2)执行SQL语句

    示例1——创建表和添加记录

    # 创建数据表
    sql="create table people(name char(30),job char(10),pay int(4));"
    cursor.execute(sql)
    # 添加记录
    cursor.execute('insert into people values(%s,%s,%s);',('Bob','dev',50000))# 或者也可以一次性添加多条记录
    rows = [('Sue','mus',70000),('Ann','adm',60000)]
    cursor.executemany('insert into people values(%s,%s,%s);',rows)
    

    #
    操作完成后还需要进行事务提交以便数据库保存 db.commit() # 此外连接对象还有事务回滚操作:db.rollback()

    #
    最后关闭游标对象和连接对象 cursor.close() db.close()

    示例2——查询、更新和删除记录

    # 查询people表中所有记录
    cursor.execute('select * from people;')
    result = cursor.fetchall()
    for row in result:
        print(row)
    
    """ Output: ('Bob','dev',50000) ('Sue','mus',70000) ('Ann','adm',60000) """

    #
    更新people表中职务为adm的人员工资增加12000 cursor.execute('update people set pay=pay+12000 where job="adm";') cursor.execute('select * from people where job="adm";') db.commit(); result = cursor.fetchall() print(result)
    """Output: [('Ann','adm',72000)] """

    #
    删除people表中姓名为Bob的记录 cursor.execute('delete from people where name="Bob";') cursor.execute('select * from people;') db.commit(); result = cursor.fetchall() for row in result: print(row)
    """Output: ('Sue','mus',70000) ('Ann','adm',72000) """

    3)其他使用

    ①cursor.rowcount属性:返回执行完SQL语句后所影响的行数

    # 使用rowcount获取所影响的行数
    cursor.execute('select * from people;')
    print(cursor.rowcount)  # Output:3

    ②cursor.description属性:返回执行完SQL查询语句后所得到的字段名和字段属性

    # 使用description获得表字段名和字段属性
    cursor.execute('select * from people;')
    print(cursor.description)
    
    """ Output: (('name',None,None,None,None,None,None),('job',None,None,None,None,None,None), ('pay',None,None,None,None,None,None))# 具体列属性描述请参阅相关API说明 """

    #
    格式化表字段名 cursor.execute('select * from people;') colnames = [desc[0] for desc in cursor.description] print(colnames)
    """ Output: ['name','job','pay'] """

    ③cursor.fetchall():返回执行完SQL查询语句后得到结果的列表(元素为行的元组形式)

       cursor.fetchone():返回执行完SQL查询语句后得到结果的第一行

       cursor.fetchmany(n):返回执行完SQL查询语句后得到结果的前n行

    这里要注意的是fetch获得的行是根据游标来定位的,就是说每一次调用fetch相关行数,游标就会移动,下一次再调用fetch时从上次游标的位置开始获得记录,当其已经到表末尾时,则返回空序列。

    # 连续调用fetch方法
    cursor.execute('select * from people;')
    rows1 = cursor.fetchall()
    print(rows1)  # Output:[('Bob','dev',50000),('Sue','mus',70000),('Ann','adm',60000)]
    rows2 = cursor.fetchall()
    print(rows2)  # Output:[]

    ④cursor.scroll(num,mode):控制游标对象的移动以便重定fetch方法

    # 使用scroll方法调整游标位置
    cursor.scroll(1,mode='relative')  # 相对当前位置顺序移动
    cursor.scroll(2,mode='absolute')  # 相对绝对位置顺序移动

    以上便是对python数据库操作的pymysql库一些简单介绍,希望对大家能有所帮助,如有什么问题欢迎大家留言学习交流。

    如想深入了解学习pymysql欢迎查阅相关文档https://pymysql.readthedocs.io/en/latest/index.html

  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/Unikfox/p/9241391.html
Copyright © 2011-2022 走看看