首页 > 数据库 >36.PyMySQL模块

36.PyMySQL模块

时间:2024-06-07 09:24:29浏览次数:36  
标签:execute 36 PyMySQL cursor user 模块 sql conn result

PyMySQL模块

【一】简介

  • DB-API:

    • Python标准数据库规范为 DB-API, DB-API定义了一系列必须的对象和数据库操作方式,以便为各种数据库系统和数据库访问程序提供一致的访问接口。
  • PyMySQL:

【二】使用方法介绍

1)安装

pip install pymysql
pip install cryptography

2)连接语法

# 导入模块
impoort pymysql
# 创建连接对象(简介版)
conn = pymysql.connect(
    user='root',		# 用户名
    ppassword='123456',	# 密码
    host='127.0.0.1',	# ip(本地:127.0.0.1 / localhost)
    port=3306,			# 端口
    database='day_05'	# 需要连接的数据库
)
# 常见的参数
def __init__(
        self,
        *,
        user=None,  		# 用户名
        password="",		# 密码
        host=None,			# ip(本地:127.0.0.1 / localhost)
        database=None,		#需要连接的数据库
        port=0,				# 端口
        charset="",			# 编码集
        sql_mode=None,		# 严格模式
        cursorclass=Cursor,	# 获取查询集的显示结果样式
        autocommit=False,	#自动执行提交
)

3)主要方法介绍

方法 功能
cursor() 获取游标对象,操作数据库,如执行DML操作,调用存储过程等
commit() 提交事务
rollback() 回滚事务
close() 关闭数据库连接

【三】基础功能介绍

1)创建连接对象

import pymysql

conn = pymysql.connect(
    user='root',
    password='123456',
    host='localhost',
    port=3306,
    database='day_05',
    # autocommit=True	自动提交事务
    charset='utf8mb4'
)
# 创建游标,查询结果以元组形式返回
cursor = conn.cursor()

2)查询结果

1.查询所有结果(fetchall)

sql = 'select * from user'
# 执行
cursor.execute(sql)
# 返回结果
result = cursor.fetchall()
print(result)
# ((1, 'ST1', 'woman', 41), (2, 'ST2', 'woman', 24), (3, 'ST3', 'man', 38), (4, 'ST4', 'woman', 31), (5, 'ST5', 'man', 28))

2.获取一行数据(fetchone)

sql = 'select * from user'
# 执行
cursor.execute(sql)
# 返回结果
result = cursor.fetchone()
print(result)
# (1, 'ST1', 'woman', 41)

3.获取指定数量数据(fetchmany)

sql = 'select * from user'
# 执行
cursor.execute(sql)
# 返回结果
result = cursor.fetchmany(2)
print(result)
# ((1, 'ST1', 'woman', 41), (2, 'ST2', 'woman', 24))

4.移动光标

cursor.scroll(1, 'relative')  # 相对于当前位置往后移动一个单位
cursor.scroll(1, 'absolute')  # 相对于起始位置往后移动一个单位
sql = 'select * from user'
# 执行
cursor.execute(sql)
# 返回结果
result = cursor.fetchmany(size=0)
print(result)
# ((1, 'ST1', 'woman', 41),)

# 相对于当前位置往后移动一个单位
cursor.scroll(1, 'relative')
result = cursor.fetchone()
print(result)
# (3, 'ST3', 'man', 38)

# 相对于起始位置往后移动一个单位
cursor.scroll(1, 'absolute')
result = cursor.fetchone()
print(result)
# (2, 'ST2', 'woman', 24)

3)插入操作

插入操作中的参数可以以元组、列表、字典形式传入

转换说明符 解释
%d、%i 转换为带符号的十进制数
%o 转换为带符号的八进制数
%x、%X 转换为带符号的十六进制数
%e 转化为科学计数法表示的浮点数(e 小写)
%E 转化为科学计数法表示的浮点数(E 小写)
%f、%F 转化为十进制浮点数
%g 智能选择使用 %f 或 %e 格式
%G 智能选择使用 %F 或 %E 格式
%c 格式化字符及其ASCII码
%r 使用 repr() 函数将表达式转换为字符串
%s 使用 str() 函数将表达式转换为字符串

1.直接写原生的SQL语句

sql = 'insert into user (name,sex,age) values (%s,%s,%s)'
cursor.execute(sql, ['ST-1', 'man', '18'])
cursor.execute(sql, ('ST-2', 'woman', '20'))
conn.commit()

2.一次插入多个数据

sql = 'insert into user (name,sex,age) values (%s,%s,%s)'
# 需为列表模式
user_all = [('ST-3', 'man', '18'),('ST-4', 'woman', '20')]
cursor.executemany(sql, user_all)
conn.commit()

4)更新数据

1.直接写

# id为3的age改成30
cursor = conn.cursor()
sql = 'update user set age = "30" where id = 3'
cursor.execute(sql)
conn.commit()

2.占位

cursor = conn.cursor()
sql = 'update user set age = %s where id = %s'
cursor.execute(sql,[31,3])
conn.commit()

3.关键字占位

cursor = conn.cursor()
sql = 'update user set age = %(new_age)s where id = %(id)s'
cursor.execute(sql, {'new_age': 32, 'id': 3})
conn.commit()

5)删除数据

1.直接写

cursor = conn.cursor()
sql = 'delete from user where id=2'
cursor.execute(sql)
conn.commit()

2.占位

cursor = conn.cursor()
sql = 'delete from user where id=%s'
cursor.execute(sql,[10])
conn.commit()

3.关键字占位

cursor = conn.cursor()
sql = 'delete from user where id=%(id)s'
cursor.execute(sql,{'id':11})
conn.commit()	

【四】SQL注入问题

1)概念

  • SQL语句中的--为注解

  • 若其出现在sql语句中会出现后面的内容无法执行

  • 例如在登录语句,在用户名之后出现--会使不正确的密码也显示登录成功

2)解决思路

  • 使用官方提供并建议的传值方式进行传值,
  • %s、%(name)s

标签:execute,36,PyMySQL,cursor,user,模块,sql,conn,result
From: https://www.cnblogs.com/Mist-/p/18236507

相关文章

  • 壁挂式风冷设计,HT22007充电模块让充电更轻松
    HT22007壁挂式风冷充电模块:未来充电新选择在科技日新月异的今天,充电技术也迎来了新的变革。HT22007壁挂式风冷充电模块凭借其卓越的性能和独特的设计,成为了市场上备受瞩目的新星。HT22007充电模块采用壁挂式设计,不仅美观大方,还节省空间。其风冷散热系统更是确保了充电过程中......
  • 微前端学习笔记(4):从微前端到微模块之EMP与hel-micro方案探索
    ModuleFederation是啥?ModuleFederation就是一个JavaScript远程模块加载架构,即:ModulefederationallowsaJavaScriptapplicationto dynamicallyruncodefromanotherbundle/build, onbothclientandserver。  它允许将一个应用程序的某些模块打包为一个独立的、......
  • 详解 Muduo 网络服务和日志模块
    这篇文章主要目的是介绍muduo的网络服务模块和日志模块。muduo网络服务在muduo网络库中,最重要的初始化服务,需要涉及两个核心模块,muduo::net::EventLoop和muduo::net::TcpServer。muduo::net::EventLoop不需要我们去设置,我们需要做的只是给Server指定一个EventLoop对象,并......
  • 探索 CSV 模块:Python 中 CSV 数据持久化的最佳实践
    ......
  • 西数SMR硬盘二级译码表结构(190模块)
    西数(WD)的二级译码表对应的模块文件为190模块。一,190模块的作用:用于记录LBA对应的物理位置(磁头,柱面,扇区),即实现对逻辑地址与物理地址的转换。由于WD已经有31模块负责此项转换工作,因此190模块被称之为二级译码表,简称T2。二,文件头部结构(地址:0):0-3:文件头版本“ROYL”4-4:文......
  • 【栈】736. Lisp 语法解析
    本文涉及知识点栈LeetCode736.Lisp语法解析给你一个类似Lisp语句的字符串表达式expression,求出其计算结果。表达式语法如下所示:表达式可以为整数,let表达式,add表达式,mult表达式,或赋值的变量。表达式的结果总是一个整数。(整数可以是正整数、负整数、0)let表......
  • BOSHIDA AC/DC电源模块:跟踪技术的创新之选
    BOSHIDAAC/DC电源模块:跟踪技术的创新之选AC/DC电源模块是一种能将交流电转化为直流电的设备,广泛应用于各种电子设备中。在过去的几十年中,AC/DC电源模块一直在不断发展和演进,以满足不断进步的科技需求。其中一项创新技术,即跟踪技术,成为AC/DC电源模块设计的首选。 跟踪技术是......
  • 利用西门子DQ模块控制移位寄存器,模拟串行通信
    1.背景以前了解过串行通信的方法但是没有详细了解过具体实现。趁着手上有的一堆破铜烂铁尝试自己去实现一个最简单的串行控制。目的是通过移位寄存器的不同位的表达,达到2*2=4个的继电器管断组合,达到切换矩阵的目的。这里只记录一下程序实现,不记录硬件电路。2.材料移位寄......
  • 八(汇编程序设计):输入5个同学成绩(有学号提示),然后排序,最后显示出名次表(学号,成绩)。要求:应
    代码DSEG SEGMENTGRADEDB5DUP(0)XUEHAODB'1','2','3','4','5'BUFDB4DUP(0)INFDB"Student",'$'NEWLINEDB0DH,0AHDSEGENDSSSEGSEGMENTSTACKSKTOPDB50DUP(0)S......
  • 「漏洞复现」Apache OFBiz 路径遍历漏洞(CVE-2024-36104)
    0x01 免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需......