从小白到小黑 python学习之旅 日常总结 48(navicat 补充练习 pymysql模块 )
navicat
Navicat内部封装了所有的操作数据库的命令
用户在使用它的时候只需要鼠标点点即可完成操作 无需书写sql语句
官方下载:https://www.navicat.com.cn/download/navicat-premium (或百度搜navicat)
下载完成后是一个压缩包 直接解压 然后点击安装 有提醒直接点击next即可
可以试用到期之后重新装再试用
提示
navicat能够充当多个数据库的客户端 navicat图形化界面有时候反应速度较慢 你可以选择刷新或者关闭当前窗口再次打开即可 当你有一些需求该软件无法满足的时候 你就自己动手写sql """ 1 MySQL是不区分大小写的 验证码忽略大小写 内部统一转大写或者小写比较即可 upper lower 2 MySQL建议所有的关键字写大写 3 MySQL中的注释 有两种 -- # 4 在navicat中如何快速的注释和解注释 ctrl + ? 加注释 ctrl + ? 基于上述操作再来一次就是解开注释 如果你的navicat版本不一致还有可能是 ctrl + shift + ?解开注释 """
补充练习
https://www.cnblogs.com/Its-cool/p/12846348.html
pymysql模块
""" 支持python代码操作数据库MySQL """ #安装 pip3 install pymysql
基本使用
import pymysql # 链接数据库 conn = pymysql.connect( host = '127.0.0.1', port = 3306, # 端口号 user = 'root', password = '123456', database = 'day48', # 库的名称 charset = 'utf8' # 编码千万不要加- ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象(就是用来帮你执行命令的) """ cursor=pymysql.cursors.DictCursor将查询结果以字典的形式返回 """ sql = 'select * from teacher;' res = cursor.execute(sql) # print(res) # execute返回的是你当前sql语句所影响的行数 改返回值一般不用 # 获取命令执行的查询结果 # print(cursor.fetchone()) # 只拿一条 # print(cursor.fetchall()) # 拿所有 # print(cursor.fetchmany(2)) # 可以指定拿几条 # 读取数据类似于文件光标的移动 print(cursor.fetchone()) print(cursor.fetchone()) # cursor.scroll(1,'relative') # 相对于光标所在的位置继续往后移动1位 cursor.scroll(1,'absolute') # 相对于数据的开头往后继续移动1位 print(cursor.fetchall())
通过MySQL的数据 登录账户
import pymysql user=input('用户名: ').strip() pwd=input('密码: ').strip() #链接 conn=pymysql.connect(host='localhost',user='root',password='123',database='egon',charset='utf8') #游标 cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示 #cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) #执行sql语句 sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引号 print(sql) res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目 print(res) cursor.close() conn.close() if res: print('登录成功') else: print('登录失败')
execute()之sql注入
注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符
根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'
最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name='egon';则--之后的条件被注释掉了 #1、sql注入之:用户存在,绕过密码 egon' -- 任意字符 #2、sql注入之:用户不存在,绕过用户与密码 xxx' or 1=1 -- 任意字符



解决方法:
# 原来是我们对sql进行字符串拼接 # sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd) # print(sql) # res=cursor.execute(sql) #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了) sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上 # 不要手动拼接数据 先用%s占位 之后将需要拼接的数据直接交给execute方法即可 res=cursor.execute(sql,[user,pwd]) # 自动识别sql里面的%s用后面元组里面的数据替换#pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

浙公网安备 33010602011771号