pymysql

一、概要

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,

二、PyMySQL 安装

pip install pymysql

三、操作流程

  1. 创建connection
  2. 获取cursor
  3. 执行增删改查的操作
  4. 处理数据
  5. 关闭cursor
  6. 关闭connection

四、核心类介绍

1、创建connection

  1. 说明

  2. 语法格式

    conn = pymysql.connect(host=None, user=None, password="",
    database=None, port=0, db=None,charset='')
  3. 常用参数说明

    参数名 类型 说明
    host String MySQL的服务器地址
    port int MySQL的端口号
    user String 用户名
    passwd String 密码
    db String 使用的数据库
    charset String 连接字符集
  4. 返回值

    cursor

  5. 示例代码

    HOST = '127.0.0.1'
    PORT = 3306
    USER = 'root'
    PASSWD = 'root'
    DB = 'python'
    CHARSET = 'utf8' connection = pymysql.connect(host=HOST,
    port=PORT,
    user=USER,
    passwd=PASSWD,
    db=DB,
    charset=CHARSET)
  6. 其它方法

    方法 描述
    begin() 开启事务
    commit() 提交事务
    cursor(cursor=None) 创建一个游标用来执行语句
    ping(reconnect=True) 检查连接是否存活,会重新发起连接
    rollback() 回滚事务
    close() 关闭连接
    select_db(db) 选择数据库
    show_warnings() 查看warning信息
  7. 详细

    • host – 数据库服务器所在的主机。
    • user – 登录用户名。
    • password – 登录用户密码。
    • database – 连接的数据库。
    • port – 数据库开放的端口。(默认: 3306)
    • bind_address – 当客户端有多个网络接口时,请指定连接到主机的接口,参数可以是主机名或IP地址。
    • unix_socket – 使用unix套接字而不是tcp/ip。
    • charset – 连接字符集。
    • sql_mode – 默认SQL模式。
    • read_default_file – 指定my.cnf文件路径,以便从[client]部分读取参数。
    • conv – 要使用的转换字典,而不是默认值。
    • use_unicode – 是否默认为unicode字符串,对于Py3k,此选项默认为true。
    • client_flag – 发送到MySQL的自定义标志。
    • cursorclass – 使用自定义的游标类。
    • init_command – 建立连接时要运行的初始SQL语句。
    • connect_timeout – 建立连接超时时间。(默认: 10,最小: 1,最大: 31536000)
    • read_default_group – 从配置文件中读取组。
    • compress – 不支持
    • named_pipe – 不支持
    • autocommit – 设置自动提交模式,不设置意味着使用数据库默认。(默认值: False)
    • local_infile – 是否启用“LOAD LOCAL INFILE”命令的使用。(默认值: False)
    • max_allowed_packet – 发送到服务器的数据包的最大大小 (以字节为单位,默认值: 16MB),仅用于限制小于默认值 (16KB) 的 “LOAD LOCAL INFILE” 数据包的大小。
    • defer_connect – 不要显式连接建设,等待连接调用。(默认值: False)
    • db – 连接数据库别名(兼容MySQLdb)
    • passwd – 密码输入别名(兼容MySQLdb)
    • binary_prefix – 在bytes和bytearray上添加_binary前缀(默认: False)

2、获取cursor对象

  1. 说明

    游标对象,用于执行查询和获取结果

  2. 核心方法

    方法名 说明
    execute() 用于执行一个数据库的查询命令
    fetchone() 获取结果集中的下一行
    fetchmany(size) 获取结果集中的下(size)行
    fetchall() 获取结果集中剩下的所有行
    rowcount 最近一次execute返回数据/影响的行数
    close() 关闭游标
  3. 举个栗子

    1、执行查询功能

    with connection.cursor() as cursor:
    sql = 'select * from home_user'
    cursor.execute(sql)
    results = cursor.fetchall()
    connection.commit()
    for results in results:
    uid = results[0]
    name = results[1]
    password = results[2]
    print('==========用户信息===============')
    print('用户id: {id} \n用户名: {name}\n密码: {pwd}'.format(id=uid, name=name, pwd=password))
  4. 详细

    方法 描述
    close() 关闭游标。
    execute(query, args=None) 执行单条语句,传入需要执行的语句,是string类型;同时可以给查询传入参数,参数可以是tuple、list或dict。执行完成后,会返回执行语句的影响行数,如果有的话。
    executemany(query, args) 执行多条INSERT语句,传入需要执行的语句;同时可以给查询传入参数,参数是一个mappings序列。执行完成后,会返回执行语句的影响行数,如果有的话。
    fetchone() 获取下一行数据。
    fetchall() 获取所有数据。
    fetchmany(size=None) 获取几行数据。
    read_next() 获取下一行数据。
    callproc() 用来调用存储过程。
    mogrify() 参数化查询,防止SQL注入。
    scroll(num,mode) 移动游标位置。

五、基本操作

查询数据

  1. 分页查询操作

    def find_by_page(page, size):
    with pymysql.connect(host=HOST,
    port=PORT,
    user=USER,
    passwd=PASSWORD,
    charset=CHARSET,
    db=DB_NAME) as cursor:
    sql = "SELECT * FROM t_addr LIMIT{},{}".format((page - 1) * size, size)
    cursor.execute(sql)
    user = cursor.fetchall()

事务操作

  1. 示例代码

    conn = pymysql.connect(
    host='10.10.0.109',
    port=3306,
    user='mha',
    password='123456',
    database='sbtest',
    charset='utf8'
    ) cursor = conn.cursor() # 插入sql;
    sql_insert = "insert into t_user (userid,username) values (10,'user10')"
    # 更新sql;
    sql_update = "update t_user set username = 'name91' where userid=9"
    # 删除sql;
    sql_delete = "delete from t_user where userid < 3" # 把一个事务放到一个try块里,如果出现异常就回滚;
    try:
    # 开启事务;
    conn.begin() cursor.execute(sql_insert)
    print(cursor.rowcount) cursor.execute(sql_update)
    print(cursor.rowcount) cursor.execute(sql_delete)
    print(cursor.rowcount) # 提交事务;
    conn.commit() except Exception as e:
    # 若有异常就回滚;
    conn.rollback() cursor.close()
    conn.close()

批量插入

  1. 示例代码

    # 测试事务 批量添加
    def test_batch_insert():
    conn = pymysql.connect(host=HOST,
    port=PORT,
    user=USER,
    passwd=PASSWORD,
    charset=CHARSET,
    db=DB_NAME)
    cursor = conn.cursor()
    try:
    sql = 'INSERT INTO t_addr(PROVICE, CITY, COUNTY, DEATIL, USERID) VALUES (%s,%s,%s,%s,%s)'
    li = []
    for i in range(50):
    li.append(('湖北省', '武汉市', '高新区' + str(i), '智慧园2135', 6))
    # 开启事物
    conn.begin()
    cursor.executemany(sql, li)
    # 提交
    conn.commit()
    except Exception as e:
    conn.rollback()
    print(e)
    # 报错事务回滚
    finally:
    # 关闭连接
    cursor.close()
    conn.close()

pymysql连接和操作Mysql数据库的更多相关文章

  1. robot_framewok自动化测试--(9)连接并操作 MySql 数据库

    连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...

  2. spring boot ----> jpa连接和操作mysql数据库

    环境: centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23 1.引入jpa起步依赖和mysql驱动jar包 &l ...

  3. php连接和操作mysql数据库

    <?php //数据库连接文件:link.php $link = mysql_connect("localhost", "root", "&qu ...

  4. python3操作数据库 借助pycharm快速连接并操作mysql数据库

    1.https://blog.csdn.net/qiushi_1990/article/details/78041299

  5. python3操作MySQL数据库

    安装PyMySQL 下载地址:https://pypi.python.org/pypi/PyMySQL 1.把操作Mysql数据库封装成类,数据库和表先建好 import pymysql.cursor ...

  6. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  7. python 之操作mysql 数据库实例

    对于python操作mysql 数据库,具体的步骤应为: 1. 连接上mysql host 端口号 数据库 账号 密码2. 建立游标3. 执行sql(注意,如果是update,insert,delet ...

  8. python接口自动化(三十八)-python操作mysql数据库(详解)

    简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...

  9. Python操作MySQL数据库(步骤教程)

    我们经常需要将大量数据保存起来以备后续使用,数据库是一个很好的解决方案.在众多数据库中,MySQL数据库算是入门比较简单.语法比较简单,同时也比较实用的一个.在这篇博客中,将以MySQL数据库为例,介 ...

随机推荐

  1. 数据库学习之二--SQL语句以及数据类型

    一.SQL语句种类: 1. DDL(Data Definition Language,数据定义语言)用来创建或者删除存储数据用的数据库以及数据库中的表;包含以下几种指令: a. CREATE:CREA ...

  2. Codeforces 1243 D 0-1 MST

    题面 隐隐感觉N年前做过一道类似的题. 很显然我们只需要考虑,仅有0边的子图有多少个连通块,然后这个数量减去1就是答案了(这个和kruscal过程等价). 然后其实就是妥妥的暴力了...因为1边数量非 ...

  3. setjmp

    #include <setjmp.h> #include <stdio.h> jmp_buf j; void raise_exception(void) { printf(&q ...

  4. PKUSC2019划水记

    Day -3~Day -2 划了两天的水,考了两次IOI赛制,垫了两次底.... 怕不是要凉啊(安慰自己才C3还有时间) Day -1 坐火车了,差点把身份证弄丢. 睡了一觉,肝了你的名字(结局草率差 ...

  5. selenium安装与更新

    1.通过pip show selenium 查看是否已经安装过selenium,如果已经安装selenium会显示安装的selenium的版本信息. 如果在使用pip 查看命令报Unknown or ...

  6. 20182332 实验一《Linux基础与Java开发环境》实验报告

    20182332 实验一<Linux基础与Java开发环境>实验报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 盛国榕 学号:20182332 实验教师:王志强 ...

  7. P2328 [SCOI2005]超级格雷码

    P2328 [SCOI2005]超级格雷码 暴力出奇迹喵! 这是一道模拟题 你会发现和 P5657 格雷码[民间数据]有异曲同工之妙,这道题直接按照上边链接题目的操作步骤 暴力模拟 就可以啊 我们观察 ...

  8. linux如何交叉编译i2c-tools?

    1. 获取源码 wget https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.1.tar.xz 2. 解压 ...

  9. JAVA通过FTP方式向远程服务器或者客户端上传、下载文件,以及删除FTP服务器上的文件

    1.在目标服务器上搭建FTP服务器 搭建方式有多种大家可以自行选择,例如使用Serv-U或者FTPServer.exe:这里我以FTPServer.exe为例搭建:在目标服务器(这里对应的IP是10. ...

  10. mysql多实例搭建

    一)多实例安装 [root@mysqlmaster01 ~]# mkdir /data/mysql_data2[root@mysqlmaster01 ~]# mkdir /data/mysql_dat ...