搜索
简帛阁>技术文章>Navicat软件使用 pymysql模块的使用 注入问题的产生原因与解决办法 pymysql文件的增删改查

Navicat软件使用 pymysql模块的使用 注入问题的产生原因与解决办法 pymysql文件的增删改查

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 + ? 

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")  # 相对于光标所在的位置继续往后移动1位
print(course.fetchall())


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

sql注入
注入问题
利用一些语法的特性 书写一些特定的语句实现固定的语法
mysql利用的是mysql --的注释语法

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 = ''

注入问题的解决方法
日常生活中很多软件在注册的时候都不能含有特殊符号
因为怕你构造出特定的语句入侵数据库,不安全

敏感的数据不要自己做拼接,交给execute帮你拼接即可

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("用户名密码错误")

pymysql文件的增删改查

方法一:

增删改查中 
    增删改的操作 涉及到数据的修改
    需要二次确认才能真正的操作数据 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())	# 查是可以直接显示打印结果的,不需要二次确认

方法二:

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


Navicat软件一开始学习python时候下载python解释器然后直接在终端写python代码pycharm能够更加方便快捷帮助你书写代码excelwordpdf我们在终端操作mysql也没有
阅读目录一、NavicatPremium12简介使用:二、pymysql模块使用增删三、sql注入问题产生解决方法:本文内容提要:NavicatPremium12介绍、使用。pymys
一、pymysql下载和使用之前我们都是通过MySQL自带命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本质就是一个套接字客
我们在使用MySQL时候,可以在MySQL客户终端来操作数据库中的表,同时,也可以使用navicat等可视化工具来操作数据表。但是,这只是操作个别数据,如果我们想要插入10万条数据,那肯定就不能
下载地址:批量加注释:ctrl+?键批量去注释:ctrl+shift+?键导出sql语句代码```mysql/*数据导入:NavicatPremiumDataTransferSourceServe
Navicat使用下载地址:https://panbaiducom/s/1bpo5mqj掌握:1测试+链接数据库2新建库3新建表,新增字段+类型+约束4设计表:外键5新建查询6建立表模型​注意:批量
本节重点可视化工具Navicat使用pymysql模块建立注入数据库PS:在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat
Navicat使用掌握:1测试+链接数据库2新建库3新建表,新增字段+类型+约束4设计表:外键5新建查询6建立表模型注意:批量加注释:ctrl+?键批量去注释:ctrl+shift+?键快速建表准备
这一次将使用pymysql来进行一次对MySQL增删全部操作,相当于对前五次总结:先查阅数据库:现在编写源码进行增删操作,源码为:!/usr/bin/pythoncoding:gbki
1安装pymysql:pipinstallpymysql(在命令行窗口中执行)2卸载pymysql:pipuninstallpymysql(在命令行窗口中执行)数据库连接需要注意是port是不用引