zoukankan      html  css  js  c++  java
  • PyMySQL模块的使用

    PyMySQL

      PyMySQL是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,但MySQLdb不支持python3.x版本。

    1、安装

    pip3 install pymysql

    2、使用

    a、执行SQL

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import pymysql
      
    # 创建连接
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') #存在中文时,加上 charset='utf8'
    
    # 创建游标
    cursor = conn.cursor()
    
    #默认为元组的形式返回,but..
    #cursor=pymysql.cursors.DictCursor
    #cursor=conn.cursor(cursor=cursor)#以字典的形式返回
      
    # 执行SQL,并返回收影响行数
    effect_row = cursor.execute("update hosts set host = '1.1.1.2'")
      
    # 执行SQL,并返回受影响行数
    #effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))
      
    # 执行SQL,并返回受影响行数
    #effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
    conn.commit()
    # 提交,不然无法保存新建或者修改的数据 
    cursor.close()
    # 关闭游标
    
     cursor.close() 
    # 关闭连接

    b、获取新创建数据自增ID

    cursor.close()
    new_id = cursor.lastrowid

    c、获取查询数据

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import pymysql
      
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
    cursor = conn.cursor()
    cursor.execute("select * from hosts")
      
    # 获取第一行数据
    row_1 = cursor.fetchone()
      
    # 获取前n行数据
    # row_2 = cursor.fetchmany(3)
    # 获取所有数据
    # row_3 = cursor.fetchall()
      
    conn.commit()
    cursor.close()
    conn.close()
    View Code

    注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

    • cursor.scroll(1,mode='relative')  # 相对当前位置移动
    • cursor.scroll(2,mode='absolute') # 相对绝对位置移动

    d、fetch数据类型

      关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import pymysql
      
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
      
    # 游标设置为字典类型
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    r = cursor.execute("call p1()")
      
    result = cursor.fetchone()
      
    conn.commit()
    cursor.close()
    conn.close()
    View Code

    e、调用存储过程

        调用无参存储过程

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
     
    import pymysql
     
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='tkq1')
    #游标设置为字典类型
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    #无参数存储过程
    cursor.callproc('p2')  #等价于cursor.execute("call p2()")
     
    row_1 = cursor.fetchone()
    print row_1
     
     
    conn.commit()
    cursor.close()
    conn.close()
    View Code

       调用有参存储过程

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
     
    import pymysql
     
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='tkq1')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
     
    cursor.callproc('p1', args=(1, 22, 3, 4))
    #获取执行完存储的参数,参数@开头
    cursor.execute("select @p1,@_p1_1,@_p1_2,@_p1_3")  #{u'@_p1_1': 22, u'@p1': None, u'@_p1_2': 103, u'@_p1_3': 24}
    row_1 = cursor.fetchone()
    print row_1
     
     
    conn.commit()
    cursor.close()
    conn.close()
    View Code

    三、使用with简化连接过程

    每次都连接关闭很麻烦,使用上下文管理,简化连接过程

     
    import pymysql
    import contextlib
    #定义上下文管理器,连接后自动关闭连接
    @contextlib.contextmanager
    def mysql(host='127.0.0.1', port=3306, user='root', passwd='', db='User',charset='utf8'):
      conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db, charset=charset)
      cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
      try:
        yield cursor
      finally:
        conn.commit()
        cursor.close()
        conn.close()
     
    # 执行sql
    with mysql() as cursor:
      print(cursor)
      row_count = cursor.execute("select * from tb")
      row_1 = cursor.fetchone()
      print( row_count, row_1)
    View Code
  • 相关阅读:
    netty用户退出,网络断开,重连删除用户信息
    netty的 ctx.writeAndFlush()方法
    netty实现动态定时器
    springboot java.sql.SQLException: sql injection violation, multi-statement not allow : update XXX(table)
    SpringBoot用流多次读取request请求中的数据
    mysql分组统计,按照时间排序
    Flash Player离线安装包下载指南
    maven pom.xml配置详解
    oracle 权限管理
    Oracle 表空间管理
  • 原文地址:https://www.cnblogs.com/freely/p/6798192.html
Copyright © 2011-2022 走看看