En el día 34, el software Navicat usa el módulo pymysql para usar el problema de inyección. Causas y soluciones. Verifique la adición, eliminación y modificación del archivo pymysql

Software Navicat

一开始学习python的时候 下载python解释器然后直接在终端写python代码
pycharm能够更加方便快捷的帮助你书写代码
excel word pdf

我们在终端操作mysql 也没有自动提示也无法保存等等 不方便开发
Navicat内部封装了所有的操作数据库的命令
用户在使用它的时候只需要鼠标点点即可完成操作 无需书写sql语句

安装
    直接百度搜索 有破解版的也有非破解版
        下载完成后是一个压缩包 直接解压 然后点击安装即可
        
    navicat能够充当多个数据库的客户端
    
    navicat图形化界面有时候反应速度较慢 你可以选择刷新或者关闭当前窗口再次打开即可
        
    当你有一些需求该软件无法满足的时候 你就自己动手写sql
    
提示
    1 mysql是不区分大小写的 
        忽略大小写
            验证码忽略大小写
                内部统一转大写或者小写比较即可
                upper
                lower
    
    2 mysql建议所有的关键字写大写
    
    3 mysql中的注释有两种
        --
        #
        
    4 在navicat中如何快速的注释和解注释
        ctrl + ?
        ctrl + ? 基于上述操作再来一次就是揭开注释
        如果你的navicat版本不一致还有可能是
        ctrl + shift +

módulo pymysql

支持python代码操作库mysql
安装命令:
pip3 install pymysql


import pymysql

conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="123",
    database="test2",  # 指定操作的库
    charset="utf8",  # 编码千万不要写成“utf-8”,会直接报错的
)  # 链接数据库

course = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 产生一个游标对象(就是等待输入命令的地方,帮你执行命令的)
# 如果course = conn.cursor() 括号里面不加参数,那么查询出来的数据是以元组的形式,数据不够明确,容易混乱
# cursor=pymysql.cursors.DictCursor将查询结果以字典的形式返回
sql = "select * from emp1;"
res = course.execute(sql)     # res是该查询语句的返回结果
print(res)  # execute 返回的是你当前sql语句所影响的行数,该返回值一般不用
# 获取命令执行的查询结果
print(course.fetchone())  # 只拿一条
print(course.fetchall())  # 拿所有
print(course.fetchmany(2))  # 括号里面传参可以指定拿几条数据

print(course.fetchone())
print(course.fetchone())  # 读取数据类似于文件光标的移动
course.scroll(1, "relative")  # 相对于光标所在的位置继续往后移动1print(course.fetchall())


print(course.fetchone())
print(course.fetchone())  # 读取数据类似于文件光标的移动
course.scroll(1, "absolute")    # 相当于数据的开头往后继续移动1print(course.fetchall())


Problema de inyección de inyección SQL
Use algunas características gramaticales para escribir algunas declaraciones específicas para lograr una gramática fija
mysql usa mysql - gramática de comentarios

select * from user where username ='nana' -- 
snwmoemodmeo' and password = ''

select * from user where username ='ssss' or True -- 
smmmms' and password = ''
import pymysql

conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="123",
    database="test2",
    charset="utf8"
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

username = input("username>>>:").strip()
password = input("password>>>:").strip()
sql = "select * from user where username ='%s' and password = '%s'" % (username, password)
print(sql)
rows = cursor.execute(sql)
if rows:
    print("登陆成功")
    print(cursor.fetchall())
else:
    print("用户名密码错误")
sql语句:
select * from user where username ='nana' -- snwmoemodmeo' and password = ''
select * from user where username ='ssss' or True -- smmmms' and password = ''

La solución al problema de la inyección
Muchos programas de la vida diaria no pueden contener símbolos especiales al registrarse,
porque temes construir una frase específica para invadir la base de datos, lo cual no es seguro.

No unir datos confidenciales usted mismo, simplemente déjelo ejecutar para ayudarlo a unirlos.

import pymysql

conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="123",
    database="test2",
    charset="utf8"
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

username = input("username>>>:").strip()
password = input("password>>>:").strip()
sql = "select * from user where username =%s and password = %s"
# 不要手动拼接数,先用%s占位,之后将需要拼接的数据直接交给execute方法即可
print(sql)
rows = cursor.execute(sql, (username, password))  # 自动识别sql里面的%s然后用后面元组里面的数据替换,并且会帮你把特殊符号自动过滤掉
if rows:
    print("登陆成功")
    print(cursor.fetchall())
else:
    print("用户名密码错误")

Agregar, eliminar, modificar y verificar archivos pymysql

método uno:

增删改查中 
    增删改的操作 涉及到数据的修改
    需要二次确认才能真正的操作数据 conn.commit() 

# 增
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.execute(sql, ("lala", 123))
print(rows)     # 返回的rows表示影响到的行数,值为1
conn.commit()   # 确认

# 一次性增加多条数据
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.executemany(sql, [("xxx", 123), ("ooo", 123), ("yyy", 123)])
print(rows)     # 返回的rows表示影响到的行数,值为1
conn.commit()   # 确认

# 修改
sql = "update user set username = 'bb' where id = 5"
rows = cursor.execute(sql)
print(rows)       # 返回的rows表示影响到的行数,值为1
conn.commit()     # 确认

# 删除
sql = "delete from user where id = 5"
rows = cursor.execute(sql)
print(rows)       # 返回的rows表示影响到的行数,值为1
conn.commit()     # 确认

# 查
sql = "select * from user"
cursor.execute(sql)
print(cursor.fetchall())	# 查是可以直接显示打印结果的,不需要二次确认

Método dos:

    或者在链接数据库的时候,
    在conn=pymysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="123",
        db="test2",
        charset="utf8",
        autocommit=True
    )   这样就增删改数据的时候就不需要二次确认了


Supongo que te gusta

Origin blog.csdn.net/Yosigo_/article/details/113997030
Recomendado
Clasificación