当前位置: 首页 > news >正文

【python】(十八)python常用第三方库——pymysql

目录

  • 1. pymysql 概述
  • 2. pymysql 安装
  • 3. pymysql 连接数据库
    • 3.1 pymysql 连接数据库
    • 3.2 封装获取连接的函数
  • 4. pymysql 入门实例
  • 5. pymysql 数据库操作
    • 5.1 CRUD 操作
      • 5.1.1 创建表
      • 5.1.2 插入记录
      • 5.1.3 查询记录
    • 5.2 执行事务
      • 5.2.1 更新记录
      • 5.2.2 删除记录


1. pymysql 概述

  • Python 的数据库接口标准是 Python DB-API
  • PyMySQL 是从 Python 连接到 MySQL 数据库服务器的接口
  • PyMySQL 的目标是成为 MySQLdb 的替代品
  • 官方文档:http://pymysql.readthedocs.io/

2. pymysql 安装

  • 使用 pip 安装

    pip install pymysql

  • 使用 Pycharm 界面安装

3. pymysql 连接数据库

3.1 pymysql 连接数据库

  • host:MySQL 服务器地址
  • user:用户名
  • password:密码
  • database:数据库名称
  • charset:编码方式,推荐使用 utf8mb4
# 1.导入库
import pymysql

# 2.建立连接
conn = pymysql.connect(host='服务器地址',
                     user='用户名',
                     password='密码',
                     database='数据库名',
                     charset="utf8mb4")
# 3.关闭连接
conn.close()

3.2 封装获取连接的函数

由于mysql的连接操作使用比较频繁,所以可以封装成一个数据库连接函数,并放置在__init__.py中。

#__init__.py

import pymysql

# 1.封装建立连接的对象
def get_conn():
    conn = pymysql.connect(
        host="服务器地址",
        user="root",
        password="123456",
        database="数据库名",
        charset="utf8mb4"
    )

    return conn

4. pymysql 入门实例

  1. 获取连接对象
    1. 打开
    2. 关闭
  2. 获取游标对象
    1. 执行 SQL
    2. 查询记录
from st_pymysql import get_conn

def demo():
    # 1.获取连接对象
    conn = get_conn()
    # 2.获取游标对象
    cursor = conn.cursor()
    # 3.执行SQL
    cursor.execute("SELECT VERSION()")
    # 4.查询结果
    version = cursor.fetchone()
    print(f"数据库的版本是:{version}")
    # 5.关闭连接
    conn.close()

if __name__ == '__main__':
    demo()


实际操作时,使用ip地址访问数据库报错:host ‘‘ is not allowed to connect to this mysql server

解决办法:在终端中按照以下步骤输入命令:

  1. mysql -u root -p;

    说明:根据自己的用户名来输入正确的用户,此处我的用户是root

  2. use mysql;

  3. select t.host from user t where t.user=‘root’;

    查看mysql.user 中 root用户的host是什么,可以不用执行

  4. update user set host = ‘%’ where user = ‘root’;

  5. FLUSH PRIVILEGES;

    说明:是修改在不重启mysql服务的情况下立即生效。

5. pymysql 数据库操作

5.1 CRUD 操作

5.1.1 创建表

创建表 testcase

from st_pymysql import get_conn

def createtable_demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """
        CREATE TABLE `testcase` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `title` varchar(255) COLLATE utf8_bin NOT NULL,
        `expect` varchar(255) COLLATE utf8_bin NOT NULL,
        `owner` varchar(255) COLLATE utf8_bin NOT NULL,
        PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
        """
    cursor.execute(sql)  # 执行SQL
    conn.close()  # 关闭连接

if __name__ == '__main__':
    createtable_demo()

创建结果:
在这里插入图片描述

5.1.2 插入记录

from st_pymysql import get_conn

def insert_demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """INSERT INTO testcase
        (id, title, expect, owner)
        values (1, 'S11总决赛', '冠军', 'EDG');
        """
    cursor.execute(sql)  # 执行SQL
    conn.commit()  # 提交

if __name__ == '__main__':
    insert_demo()

执行前:表中没有数据
在这里插入图片描述

执行后:
在这里插入图片描述

5.1.3 查询记录

查询操作:

  • fetchone():获取单条记录
  • fetchmany(n):获取 n 条记录
  • fetchall():获取所有结果记录
import sys

from st_pymysql import get_conn

def demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标
    sql = "SELECT * FROM testcase;"
    # 捕获异常
    try:
        cursor.execute(sql)  # 执行SQL
        record = cursor.fetchone()  # 查询记录
        print(record)
    except Exception as e:
        print(sys.exc_info())  # 打印错误信息
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()
  
"""
执行结果:
(1, 'S11总决赛', '冠军', 'EDG')
"""

5.2 执行事务

  • 提交:commit

    向数据库发出信号,完成变更,并且在操作后不再进行其他更改。

  • 回滚:rollback

    对一个或者多个的变更不满意,可以使用回滚还原回去。

  • try-catch-finally

from st_pymysql import get_conn

def demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """INSERT INTO testcase
        (id, title, expect, owner)
        values (2, 'S11全球总决赛', '冠军', 'EDG');
        """
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()

运行结果:
在这里插入图片描述

5.2.1 更新记录

更新数据表的数据

from st_pymysql import get_conn

def demo():
    conn = get_conn()
    cursor = conn.cursor()
    sql = "UPDATE testcase SET owner='hogwarts' WHERE id=2;"
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()

运行结果:
在这里插入图片描述

5.2.2 删除记录

删除数据表的数据

from st_pymysql import get_conn

def demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标
    sql = "DELETE FROM testcase WHERE id=3;"
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()

相关文章:

  • 供应水溶性喹啉腈磺酸盐母体,QM-SO3,CAS:1800102-18-4
  • Unity Shader LOD详解
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • Linux环境:Nginx配置SSL证书,https协议请求 443端口
  • git tag相关
  • HTML篇三——(1)
  • Android移动应用开发之六种布局
  • Nginx 学习笔记
  • 【027】mongoose V6.4之创建监听套接字fd
  • 《安富莱嵌入式周报》第283期:全开源逆向“爆破”硬件工具,Linux内核6.1将正式引入RUST语言,I3C培训教程,80款市场成熟的电感式位置传感器设计
  • 操作系统实验六 文件管理
  • Bert(Bidirectional Encoder Representations from Transformers)
  • oracle使用rman备份实现异机数据恢复
  • 巩固类和对象的知识点——牛客5道题目
  • 黄老板,给我来个亲笔签名,抽显卡~
  • [笔记] php常见简单功能及函数
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【comparator, comparable】小总结
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Create React App 使用
  • es6(二):字符串的扩展
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • miaov-React 最佳入门
  • Python中eval与exec的使用及区别
  • Spring Boot MyBatis配置多种数据库
  • 回顾 Swift 多平台移植进度 #2
  • 京东美团研发面经
  • 模型微调
  • 前端临床手札——文件上传
  • 前端之React实战:创建跨平台的项目架构
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 项目实战-Api的解决方案
  • 主流的CSS水平和垂直居中技术大全
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma once与条件编译
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (论文阅读11/100)Fast R-CNN
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (四)JPA - JQPL 实现增删改查
  • (学习日记)2024.01.19
  • (一) springboot详细介绍
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @Autowired多个相同类型bean装配问题
  • @Service注解让spring找到你的Service bean
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [20161101]rman备份与数据文件变化7.txt