1、安装pymysql模块:
命令:终端输入-> pip3 install pymysql
验证:python进入窗口输入 -> import pymysql 不报错即可
2、pycharm中导入pymysq模块包:
import pymysql
3、创建连接对象:
connect()
4、获取游标对象:
连接对象.cursor()
5、pymysql完成数据的查询操作:
游标对象.execute()
6、关闭游标和连接
游标对象.close()
连接对象.close()
7、实例🌰:
# 导入pymysql包
import pymysql
# 创建连接对象
conn = pymysql.connect(host="10.5.1.117", port=3306, user="root", password="combanc", database="talent_directory",
charset="utf8")
# 获取游标对象
cs = conn.cursor()
# 增加数据:pycharm默认是开启事务的,此时客户端访问students表还是原来的数据,因此需要提交事务
sql = "insert into students(name) values('Lucy');"
cs.execute(sql)
# 删除数据
sql = "delete from students where id = 3;"
cs.execute(sql)
# 修改数据
sql = "update students set name='Lilo' where id=1;"
cs.execute(sql)
# pymysql完成数据的查询条件
sql = "select * from students;"
cs.execute(sql)
# for循环来显示数据
cs.execute(sql)
content = cs.fetchall()
for i in content:
print(i)
# 提交操作
conn.commit()
# 关闭游标和连接
cs.close()
conn.close()
8、防止SQL注入:SQL语句参数化
- (1) 不安全方式:注意sql等于双引号里的'%s'带了单引号,双引号后面百分号拼接了变量。
find_name = input("请输入您要查询的学生姓名:")
sql = "select * from students where name = '%s'" % find_name
# 导入pymysql包
import pymysql
# 创建连接对象
conn = pymysql.connect(host="10.5.1.117", port=3306, user="root", password="combanc", database="talent_directory",
charset="utf8")
# 获取游标对象
cs = conn.cursor()
# 不安全的方式
# 根据id查询学生信息,例如:' or 1 or'
find_name = input("请输入您要查询的学生姓名:")
sql = "select * from students where name = '%s'" % find_name
# 显示所有数据
cs.execute(sql)
content = cs.fetchall()
for i in content:
print(i)
# 关闭游标和连接
cs.close()
conn.close()
运行以上代码,控制台输入:' or 1 or'字符串时,查询结果会将整个表数据全部查出来,而我们目的只是要按照where语句将姓名与输入条件一致的数据显示出来,因此这样会导致sql会被恶意注意的可能性,不安全。
执行结果:当控制台输入' or 1 or'时
不安全模式.pngimage.png
- (2)安全的方式:注意,sql双引号里的%s没有被单引号引起来,并且双引号后面无任何内容。
find_name = input("请输入您要查询的学生姓名:")
sql = "select * from students where name = %s"
# 导入pymysql包
import pymysql
# 创建连接对象
conn = pymysql.connect(host="10.5.1.117", port=3306, user="root", password="combanc", database="talent_directory",
charset="utf8")
# 获取游标对象
cs = conn.cursor()
# 安全的方式
find_name = input("请输入您要查询的学生姓名:")
sql = "select * from students where name = %s"
# 显示所有数据
cs.execute(sql, [find_name])
content = cs.fetchall()
for i in content:
print(i)
# 关闭游标和连接
cs.close()
conn.close()
网友评论