8.22MySQL(五)pymysql模块、sql注入问题

一、基本查询语句及方法补充

1.concat_ws

  拼接多个

  select concat(name,":",age,":",post,":",salary) from emp;

  select concat_ws(‘:‘,name,age,post,salary) from emp;

  上述语句完全等价

2.exist(了解)

  EXISTS关字键字表示存在。

  在使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,True或False。

  当返回True时,外层查询语句将进行查询

  当返回值为False时,外层查询语句不进行查询。

select * from emp
    where exists
    (select id from dep where id > 3);

select * from emp
    where exists
    (select id from dep where id > 250);

二、pymysql模块

1.安装:pip3 insatll pymysql

2.代码连接

import pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘  # 编码千万不要加-,如果写成了utf-8会直接报错
)
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象,以字典的形式返回查询出来的数据,键是表的字段,值是表的字段对应的信息
sql = ‘select * from teacher‘
res = cursor.execute(sql)  # 执行传入的sql语句
print(res)  # res是执行语句返回的数据条数

print(cursor.fetchone())  # 只获取一条数据
print(cursor.fetchall())  # 获取所有的数据,返回的结果是一个列表

cursor.scroll(1,‘absolute‘)  # 控制光标移动,absolute相对于起始位置,往后移动几位
cursor.scroll(1,‘relative‘)  # relative相对于当前位置,往后移动几位

三、sql注入问题

1.注入问题,错误代码

import pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘  # 编码千万不要加-,如果写成了utf-8会直接报错
)
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象,以字典的形式返回查询出来的数据,键是表的字段,值是表的字段对应的信息

username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where username=‘%s‘ and password=‘%s‘"%(username,password)
res = cursor.execute(sql)  # 传入执行的语句

# 用户名正确
username >>>: jason‘ -- jjsakfjjdkjjkjs
password >>>: ‘‘

# 用户名密码都不对的情况
username >>>: xxx‘ or 1=1 --asdjkdklqwjdjkjasdljad
password >>>: ‘‘

  sql注入问题,就是利用注释等具有特殊意义的符号,来完成一些骚操作

  后续写sql语句,不要手动拼接关键性的数据

  而是让excute帮你去做拼接

2.excute,正确代码

import pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘  # 编码千万不要加-,如果写成了utf-8会直接报错
)
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象,以字典的形式返回查询出来的数据,键是表的字段,值是表的字段对应的信息

username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where name =%s and password = %s"
res = cursor.execute(sql,(username,password))  # 能够帮你自动过滤特殊符号,避免sql注入的问题
# execute能够自动识别sql语句中的%s,帮你做替换
if res:
    print(cursor.fetchall())
else:
    print(‘用户名或密码错误‘)

四、pymysql增删改

1.增删改(以下增删改操作都不生效)

  先代码连接

import pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘  # 编码千万不要加-,如果写成了utf-8会直接报错
)
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象,以字典的形式返回查询出来的数据,键是表的字段,值是表的字段对应的信息

  新增

sql = ‘insert into user(name,password) values("jerry","666")‘
cursor.execute(sql)

  修改

sql = ‘update user set name = "jasonhs" where id = 1‘
cursor.execute(sql)

  删除

sql = ‘delete from user where id = 6‘
cursor.execute(sql)

  以上增删改操作都不生效

2.conn.commit()

  增、改和删操作只执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改

1.增删改操作正确写法

# 新增
sql = ‘insert into user(name,password) values("jerry","666")‘
cursor.execute(sql)
conn.commit()

# 修改
sql = ‘update user set name = "jasonhs" where id = 1‘
cursor.execute(sql)
conn.commit()

# 删除
sql = ‘delete from user where id = 6‘
cursor.execute(sql)
conn.commit()

2.也可以在连接的时候多配一个参数

import pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘  # 编码千万不要加-,如果写成了utf-8会直接报错
    autocommit = True  # 这个参数配置完成后,增删改操作都不需要再手动加conn.commit了
)
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象,以字典的形式返回查询出来的数据,键是表的字段,值是表的字段对应的信息

# 新增
sql = ‘insert into user(name,password) values("jerry","666")‘
cursor.execute(sql)

  autocommit = True

  这个参数配置完成后,增删改操作都不需要再手动加conn.commit了

原文地址:https://www.cnblogs.com/francis1/p/11396619.html

时间: 2024-10-10 01:42:28

8.22MySQL(五)pymysql模块、sql注入问题的相关文章

Navicat工具、pymysql模块 sql注入

cls超 Navicat工具.pymysql模块 阅读目录 一 IDE工具介绍 二 pymysql模块 一 IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mysql服务端的一个工具,并且他是图形界面版的.我们使用它和直接使用命令行的区别就类似linux和windows系统操作起来的一个区别. 下载链接:https://pan.baidu.com/s/

Navicat可视化工具的使用、pymysql、sql注入问题

一.Navicat 可视化工具的使用 1.Navicat [1]  是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设. 它的设计符合数据库管理员.开发人员及中小企业的需要.Navicat 是以直觉化的图形用户界面而建的, 让你可以以安全并且简单的方式创建.组织.访问并共用信息. #要求掌握 1:测试+连接数据库 2:新建库 3:新建表,新增字段+类型+约束条件的创建 4:设计表:外键 5:新建查询 6:建立表的模型 7:转储/运行SQL文件 8:通过模型多表

PyMySQL防止SQL注入

一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体思路 1.寻找到SQL注入的位置 2.判断服务器类型和后台数据库类型 3.针对不通的服务器和数据库特点进行SQL注入攻击 三.SQL注入攻击实例  1.字符串拼接查询,造成注入 import pymysql conn = pymysql.connect(host='127.0.0.1', port=

游标操作/pymysql事务/sql注入/索引

游标操作 import pymysql from pymysql.cursors import DictCursor # 1)建立数据库连接对象 conn conn = pymysql.connect(user='root', passwd='root', db='oldboy') # 2)通过 conn 创建操作sql的 游标对象 cursor = conn.cursor(DictCursor) # 3)编写sql交给 cursor 执行 sql = 'select * from t1' #

Web安全相关(五):SQL注入(SQL Injection)

简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统. 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入.前者由不安全的数据库配置或数据库平台的漏洞所致:后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询.基于此,SQL注入的产生原因通常表现在以下几方面: 1. 不当的类型处理: 2. 不安全的数据库

PHPCMS v9.6.0 wap模块 SQL注入

调试这个漏洞的时候踩了个坑,影响的版本是php5.4以后. 由于漏洞是由parse_str()函数引起的,但是这个函数在gpc开启的时候(也就是php5.4以下)会对单引号进行过滤\'  . 看这里:https://github.com/80vul/pasc2at 漏洞来源:https://www.seebug.org/vuldb/ssvid-92929 分析:这个漏洞要三步的过程,直接进入第三步. 根据给的poc:   /phpv9.6.0/index.php?m=content&c=down

pymysql 防止sql注入案例

from pymysql import connect def main(): """sql演示""" # 1.输入一个语句,根据id展示相应的内容 id = input("请输入查询的id") # 2.执行sql语句 # 创建Connection连接 conn = connect(host='localhost', port=3306, database='jing_dong', user='root', password=

13 pymysql模块的 基本使用/ sql 注入的问题/增删改查

import pymysql user=input('用户名: ').strip() pwd=input('密码: ').strip() #连接MySQL conn=pymysql.connect( host='localhost', user ='root', password='888888', database='db10', charset='utf8' ) #游标 cursor=conn.cursor() #执行sql 语句 sql='select * from userinfo wh

pymysql的使用及sql注入

pymysql简介 pymysql是python操纵mysql的一个模块,本质上是一个socket客户端 pymysql使用 准备数据 #创建数据库db2,如果已存在,请忽略 CREATE DATABASE db2 DEFAULT CHARACTER SET utf8; #创建用户表 CREATE TABLE `userinfo` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `username` varchar(20