ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

    • 并发编程

    • 爬虫笔记

    • 模块笔记

      • PyInstaller
      • Jieba
      • Kubernetes
      • Logging
      • Loguru
      • Socket
      • APScheduler
      • PyMySQL
        • 介绍
        • 游标
          • 介绍
          • Cursor
          • SSCursor
          • DictCursor
          • SSDictCursor
        • 模块使用
          • 安装
          • 连接MySQL
          • 执行操作
          • 断开MySQL
          • 防止SQL注入
      • Redis
    • 后端笔记

  • C笔记

  • C++笔记

  • Arduino笔记

  • Web笔记

  • Dev
  • Python笔记
  • 模块笔记
Hoshinozora
2024-01-08
目录

PyMySQL

# 介绍

PyMySQL是在Python3.x版本中用于连接MySQL数据库的模块,

Python2中则使用mysqldb。

# 游标

# 介绍

游标是数据库操作中用于逐行处理查询结果集的接口,通过pymysql.cursor实现。

常用的游标类型有:Cursor、SSCursor、DictCursor、SSDictCursor。

例如:cur = conn.cursor(pymysql.cursors.SSCursor)

# Cursor

普通的游标对象,默认创建的游标对象。

返回元组类型,元素也为元组类型。

# SSCursor

不缓存游标,获取一次数据后,缓存将被删除。也就是不可重复fetch获取,主要用于当操作需要返回大量数据的时候。

返回列表类型,元素为元组类型。

# DictCursor

以字典的形式返回操作结果。

返回列表类型,元素为字典类型,数据以字段名作为Key。

# SSDictCursor

不缓存游标,获取一次数据后,缓存将被删除。也就是不可重复fetch获取,主要用于当操作需要返回大量数据的时候。

返回列表类型,元素为字典类型,数据以字段名作为Key。

# 模块使用

# 安装

pip3 install mysqldb
1

# 连接MySQL

import pymysql

mysql_conn = pymysql.connect(
    host='[主机IP]',
    port='[数据库服务端口]'
    user='[用户名]',
    password='[用户密码]',
    database='[数据库名]',
    charset='[字符集]')
1
2
3
4
5
6
7
8
9

host:MySQL服务的主机。

port:连接MySQL服务的端口,不指定则默认使用:3306。

user:连接MySQL的用户名。

password:连接MySQL的密码。

database:连接的MySQL中的数据库,不指定则只连接MySQL不进入库。

charset:通信采用的编码方式,不指定则默认使用:utf8mb4。

# 执行操作

# 实例化Cursor对象,用于执行SQL语句并获得结果。
# cur = [连接对象].cursor()
cur = mysql_conn.cursor()

# 执行单条SQL语句,并返回受影响的行数。
# cur.execute(SQL语句)
cur.execute("select USERID from user;")


# 执行多条SQL语句,并返回受影响的行数。
# cur.executemany(SQL语句)
queryid = [('123456'), ('22334')]
cur.executemany("select * from user where userid = %s;", queryid)

# 获取最后执行的SQL语句的所有查询结果,如果是使用executemany,则只会返回最后一条SQL语句执行的查询结果。
# cur.fetchall()
print(cur.fetchall())

# 返回指定数量的SQL查询结果的记录行。
# cur.fetchmany(Num)
print(cur.fetchmany(3))

# 提交当前连接执行过的事务,虽然MySQL默认开启了自动提交,但该模块DML语句需要手动提交。
# UPDATE、INSERT、DELETE等语句操作后需要提交事务。
# [连接对象].commit()
mysql_conn.commit()

# 回滚事务,一般会配合异常处理使用,来实现一旦执行SQL语句出错,就进行事务的回滚。
# [连接对象].rollback()
try:
    cur.execute(sql1)
    cur.execute(sql2)
    # 如果没异常报错,则会正常提交。
    mysql_conn.commit()
except Exception as e:
    print(str(e))
    # # 如果有异常报错,则会执行回滚操作。
    mysql_conn.rollback()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# 断开MySQL

# 关闭游标对象。
cur.close()

# 关闭连接对象,断开MySQL连接。
mysql_conn.close()
1
2
3
4
5

# 防止SQL注入

我们要避免cursor.execute()等方法直接使用完整的SQL,而是通过如下方式,通过参数传递参数,这样方法会校验是否有SQL注入。

queryid = '22334'
queryname = 'hello'
# 位置传参
cur.execute("select * from user where userid = %s;", queryid)
# 字典传参
cur.execute("select * from user where userid = %(userid)s username = %(username)s;", {"userid": queryid}, "username": queryname)
1
2
3
4
5
6
#Python#模块#mysql
APScheduler
Redis

← APScheduler Redis→

最近更新
01
Vue路由
12-09
02
FastAPI实现用户管理
11-23
03
Tortoise ORM
11-23
更多文章>
Theme by Vdoing | Copyright © 2022-2026 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式