跳至内容

pymysql

本文介绍如何使用 Python 的 pymysql 库连接和操作 MySQL 数据库,包括基本查询、SQL 注入防御以及增删改查的完整示例。

安装

pip3 install pymysql

使用

import pymysql

conn = pymysql.connect(
		host = '127.0.0.1',
    	port = 3306
    	user = 'root',
    	password = '123456',  # 还可以简写passwd = '123456'
    	database = 'db666',  # 还可以简写db = 'db666'
    	charset = 'utf8'  # 千万不要加横杆
)
# cursor = conn.cursor()  # 括号内不加参数的话 那么查询出来的数据是元组的形式 数据不够明确 容易混乱
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 字典形式返回数据 数据有具体的描述信息 更加的合理方便

sql = 'select * from user'
affect_rows = cursor.execute(sql)  # 返回值是当前sql语句执行的受影响的行数
cursor.fetchone()  # 只能结果的一条  数据本身
cursor.fetchall()  # 拿所有		列表套多个数据
cursor.fetchmany(n)  # 指定获取几条
"""
上述三个方法在读取数据的时候有一个类似于文件指针的特点
"""
cursor.scroll(1,'relative')  # 相对于光标所在的当前位置往后移动
cursor.scroll(1,'absolute')  # 相对于数据开头往后移动

SQL注入问题

"""
就是利用一些特殊字符 结合软件固定的一些语句句式
非法侵入并违规操作

利用MySQL注释的语法 造成了sql注入的问题
	用户不需要输入用户名和密码也能够登录并且获取到整个用户表的数据

日常应用软件在获取用户输入的内容时 都会限制一些特殊符号的输入

如何解决上述问题?
	所有敏感的信息不要自己去做拼接操作 交互固定的模块帮你去过滤数据防止sql注入

在pymysql中 execute就能够帮你过滤
"""
# sql注入
sql = "select * from user where username='%s' and password='%s'"%(username,password)
# 不要自己拼接
sql = "select * from user where username=%s and password=%s"
execute(sql,(username,password))  # 只能识别%s

pymysql补充

# 1.针对增删改 pymysql需要二次确认才能真正的操作数据
import pymysql


conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    passwd = '123456',
    db = 'day48',
    charset = 'utf8',
    autocommit = True
)
cursor = conn.cursor(pymysql.cursors.DictCursor)

# 增
sql = 'insert into user(name,password) values(%s,%s)'
# rows = cursor.execute(sql,('jackson',123))
rows = cursor.executemany(sql,[('xxx',123),('ooo',123),('yyy',123)])
print(rows)
# conn.commit()  # 确认
# 修改
# sql = 'update user set name="jasonNB" where id=1'
# rows = cursor.execute(sql)
# print(rows)
# conn.commit()  # 确认
# 删除
sql = 'delete from user where id=7'
rows = cursor.execute(sql)
print(rows)
conn.commit()  # 确认
# 查
# sql = 'select * from user'
# cursor.execute(sql)
# print(cursor.fetchall())

"""
增删改查中
    删改增它们的操作设计到数据的修改 
    需要二次确认
"""


# 还可以一次性插入N多条数据
rows = cursor.executemany(sql,[('xxx',123),('ooo',123)])
最后更新于