36.PyMySQL模块

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
posted on 2024-06-07 09:12  晓雾-Mist  阅读(39)  评论(0)    收藏  举报