下载/卸载pymysql库
pip3 install pymysql
pip3 unstall pymysql
查看本地已安装的python库
pip3 list
查看pymysql库
pip3 show PyMySQL
导包
import pymysql
创建连接
# Connect = Connection = connect,三种方式都可以创建数据库连接
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
password='zking',
database='test1',
charset='utf8')
创建游标
cursor = conn.cursor()
执行sql语句
cursor.execute(sql)
通过游标获取查询结果,返回结果为元组
# 查询一行结果
row = cursor.fetchone()
# 查询所有结果
rows = cursor.fetchall()
for row in rows:
print(row)
关闭游标
cursor.close()
关闭连接
conn.close()
增删改操作
try:
cursor.execute(sql)
# 新增、删除、修改数据需要提交事务
conn.commit()
except Exception as e:
conn.rollback()
finally:
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
防SQL注入
什么是SQL注入:用户提交带有恶意的数据与SQL语句进行字符串拼接,从而影响SQL语句的语义,最终产生数据泄露的影响
如何防止SQL注入?
答:SQL语句参数化
- SQL语句中的条件内容用%s来占位,此处不是python中的字符串格式化操作
- 将SQL语句中的%s占位所需要的参数存放到一个列表中,把参数列表传递给execute方法的第二个参数
防止SQL注入示例代码:
# 1.导包
from pymysql import connect
# 2.创建连接 Connect = Connection = connect,三种方式都可以创建数据库连接
conn = connect(host='localhost',
port=3306,
user='root',
password='zking',
database='test1',
charset='utf8')
# 3.创建游标
cursor = conn.cursor()
# 非安全的sql编写方式, 输入 "or 1=1 or"'
# 4.执行sql语句
# sql = 'select * from student where name="%s"' % '张三 "or 1=1 or"'
# print(sql)
# cursor.execute(sql)
# 安全的sql编写方式
# 4.执行sql语句
params = ('张三',)
sql = 'select * from student where name=%s'
print(sql)
cursor.execute(sql, params)
# 通过游标获取查询结果,返回结果位元组
rows = cursor.fetchall()
for row in rows:
print(row)
# 5.关闭游标
cursor.close()
# 6.关闭连接
conn.close()