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. C++泛型编程-扩展

    类型做参数是C++模板实现的主要形式.由此实现了类模板-->模板类-->实例的过程 当然除此之外也可以参考bitset的实现方式,参数决定类型的做法. #include <iostr ...

  2. locale与C字符编码

    ref: https://www.cnblogs.com/gatsby123/p/11150472.html Unicode 字符集 代码点 与编码表中的某个字符对应的代码值.在Unicode标准中, ...

  3. 「ARC103D」Robot Arms「构造」

    题意 给定\(n\)个点,你需要找到一个合适的\(m\)和\(d_1,d_2,...,d_m\),使得从原点出发每次向四个方向的某一个走\(d_i\)个单位,最终到达\((x_t, y_t)\).输出 ...

  4. DRF-视图类组件

    补充 GET  books-------->查看数据--------------------> 返回所有数据列表 :[{},{},{}] POST books-------->添加数 ...

  5. C++ 2048游戏

    2048游戏实现起来还是比较简单的,注意几个细节,调几个bug就好了. 直接上源码,需要的可以拿走(手动滑稽 /*dos windows 25*80*/#include <algorithm&g ...

  6. gitlab 配置.ssh实现免密登陆

    首次配置gitlab的.ssh时 安装gitbash 通过gitbash 配置.ssh 打开gitbash,输入如下命令生成ssh,邮箱换成自己的 ssh-keygen -t rsa -C " ...

  7. slax linux的定制

    由于数据结构教学的需要,需要用到linux,要求就是小,启动快,可定制性强,恰好slax正好满足要求,以下就是定制slax linux的过程记录: 什么是Slax Slax是一个基于Linux的Liv ...

  8. Python经典练习题1:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    Python经典练习题 网上能够搜得到的答案为: for i in range(1,85): if 168 % i == 0: j = 168 / i; if i > j and (i + j) ...

  9. 异步机制 - APC

    APC : An asynchronous procedure call,异步过程调用,是微软提供的一种在线程上下文中执行代码的机制.当向一个线程插入一个USER APC时,如果线程进入alertab ...

  10. Golang文件操作整理

    基本操作 文件创建 创建文件的时候,一定要注意权限问题,一般默认的文件权限是 0666 关于权限的相关内容,具体可以参考鸟叔p141 这里还是再回顾下,文件属性 r w x r w x r w x,第 ...