pymysql

pymysql 是一个第三方模块,帮我们封装了 建立表/用户认证/sql的执行/结果的获取

import pymysql

# 步骤
'''
1. 连接服务端
2. 用户认证
3. 发送指令
4. 提取结果
'''
# 1.连接服务器,获取连接对象(本质上就是封装好的socket)
conn = pymysql.connect(
host = "127.0.0.1", # 如果是本机,可以忽略
port = 3306, # 如果没有改过,可以忽略
user = "root",
password = "123",
db = "test_7_17"
)
# 2.通过连接拿到游标对象
# 默认返回的游标是元祖类型,不方便使用,更换为字典类型的游标
c = conn.cursor(pymysql.cursors.DictCursor) # 3.执行sql
sql = "select * from user" # 返回的是查询结果数量
count = c.execute(sql) # 4.提取结果
print(c.fetchall()) # 查看所有 c.scroll(-2,mode="relative") # 因为查看完后,游标已经到最后面,所有要再次查看,就要移动游标,relative表示相对位置,即游标现在所在位置,-2表示,往前移动2个位置 print(c.fetchone()) # 查看一个值 默认是第一个, c.scroll(0,mode="absolute") # absolute 表示绝对位置,即从第一个位置开始,0表示将游标移动到第一个位置 print(c.fetchmany(2)) # 查询多个括号内加参数,2表示查询2个值 # 5 关闭连接
c.close()
conn.close()

sql 注入攻击

​ 指的是一些程序员,在输入数据时,按照sql的语法规范,提交了用于攻击性目的的数据

如果避免这个问题?

​ 在服务端执行sql前 先做sql的验证

​ 在pymysql中,已经封装了验证操作,我们只需要将参数交给pymysql来做拼接即可.

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
password = "123",
db = "test_7_17"
# autocommit = False # 如果改成True 就表示开启自动提交,不常用,pymysql中默认开启事务,所以我们必须在每次执行完成后,commit提交下
)
c = conn.cursor(pymysql.cursors.DictCursor) name = input("name>>>").strip()
pwd = input("pwd>>>").strip()
# 不能把变量名直接放到sql执行语句中,防止sql攻击
sql = "select * from user where name = %s and pwd = %s" count = c.execute(sql,(name,pwd)) if count:
print("登陆成功")
else:
print("登陆失败")
print(c.fetchall())
c.scroll(-2,mode="relative") print(c.fetchone())
c.scroll(0,mode="absolute")
print(c.fetchmany(2))

调用存储过程

# 创建存储过程
delimiter |
create procedure add1(in a int, in b int, out c int)
begin
set c = a + b;
end |
delimiter ; # pymysql 中调用
import pymysql
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
password = "123",
db = "test_7_17") c= conn.cursor(pymysql.cursors.DictCursor)
c.callproc("add1",(1,2,5)) # 1 对应 @_add1_0 ,2 对应 @_add1_1 , 5 对应 @_add1_2
c.execute("select @_add1_2") # 所以返回结果的调用得用第三个变量
print(c.fetchall()) # 调用存储过程时,传入参数,会自动定义成变量,
# 命名方式,@_过程的名称_参数的索引, 从0开始

最新文章

  1. Handler用法
  2. AOP基础—代理模式
  3. 跟我一起云计算(1)——storm
  4. [ubuntu]给ubuntu server安装xubuntu(xfce)窗口管理器
  5. 黑马程序员:Java编程_多线程
  6. php中图片文件的导入,上传与下载
  7. [pdf.js]预览pdf时,中文名称乱码的问题
  8. 使用qsort对结构体的数据排序
  9. Number类型
  10. POJ 3710 Christmas Game
  11. 声明了包的类Java命令找不到或无法加载主类
  12. Block(一)基础-备
  13. XMPP 服务器 Openfire 的 Emoji 支持问题(进行部分修改)
  14. lcd_1602
  15. 有indexPath获取到cell对象
  16. PHPCMS笔记第二弹
  17. python字典学习笔记
  18. for in 在数组和json中
  19. 阿里云API网关(15)监控预警
  20. 用Spark完成复杂TopN计算的两种逻辑

热门文章

  1. error: dereferencing pointer to incomplete type
  2. Nexus Repository Manager OSS 3.x 安装配置
  3. 万恶技术系列笔记-jupyter工作路径和源文件打开方式
  4. 使用trace文件分析ANR
  5. [转]JS如何判断一个对象是否为空、是否有某个属性
  6. springboot vue前后端分离 跨跨域配置
  7. windows中设置php环境变量
  8. PMP 第9~10章错题总结
  9. pipeline结合jacoco获取自动化测试代码覆盖率
  10. ABAP基础篇2 数据类型