• 带你了解MySQL数据库(五)


    Python操作MySQL

    我们想要在Pycharm里面操作MySQL需要安装一个模块 pymysql模块
    如果没有下载cmd中 pip install pymysql 或者直接pycharm中 import pymysql 点击小灯安装即可

    在这里插入图片描述

    
    		import pymysql
    		conn = pymysql.connect(host='127.0.0.1',
    							   port=3306, user='root', 
    							   password='123', database='likes', 
    							   charset='utf8mb4', autocommit=True)  # 链接服务器
    		cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 产生一个游标对象(等待输入 相当于光标处等待输入)
    		# 注意括号内内容没有写全 cursor=pymysql.cursors.DictCursor 则结果不会显示表格的信息名称
    		sql1 = 'select * from dep1'     # 编写SQL语句
    		cursor.execute(sql1)            # 发送给服务器
    		res = cursor.fetchall()         # 获取命令的执行结果
    		print(res)
    
    		cursor.fetchall() # 获取结果中所有的数据
    		cursor.fetchone() # 获取结果中一条数据
    		cursor.fetchmany(# 获取结果集中指定的数据(括号内写入数字几获得几条数据)
    		cursor 类似于光标 第一次获取完 再次获取的消息就丢失了 基于当前位置往后移动
    
    		'''pycharm 里面写入SQL语句会飘黄 不用在意'''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    SQL注入问题

    	先用SQL语言编写一个用户登录
    		import pymysql
    		conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', database='likes',
    		                       charset='utf8mb4', autocommit=True)  # 链接服务器
    		cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    		username = input('请输入您的账号:>>>>:').strip()
    		password = input('请输入您的密码:>>>>:').strip()
    		sql = "select * from new where name='%s' and pwd='%s'" % (username, password)
    		cursor.execute(sql)
    		res = cursor.fetchall()
    		# print(res)    # 如果成功打印结果
    		if res:
    		    print('登录成功')
    		else:
    		    print('用户名或密码错误')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    这个时候我们发现可以登录成功了 这么轻松吗?
    这才开始 !!! 为什么输入没输入密码就登录成功了

    在这里插入图片描述
    在这里插入图片描述

    	select * from new where name='xxx' or 1=1 -- asdadqdqdw' and pwd=''
    	select * from new where name='like' -- asdqdqdq1d1' and pwd=''
    	
    	我们发现是我们在输入SQL语句的时候 达到了注释语法把后面给注释掉了 只有用户名是对的 就对了
    	第一个是where后面结果如果是TRUE的话 那就算对
    
    • 1
    • 2
    • 3
    • 4
    • 5

    所以SQL注入的本质就是 利用一些特殊符号的组合产生了特殊的含义从而逃脱了正常的业务逻辑

    措施就是 针对用户输入的数据不能输入符号什么的 这就是为什么很多网站账号不允许输入特殊符号的原因 所以用户输入的数据不要自己处理 交给专门的方法自动过滤

     sql = "select * from new where name=%s and pwd=%s"
     cursor.execute(sql, (username, password))  # pymysql会自动识别%s 并自动过滤各种符合 最后合并数据
    
    • 1
    • 2

    在这里插入图片描述

    知识点补充

    cousor.executemany()
    它的用法我们也知道就是一次性插入多行数据

    import pymysql
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', database='likes',
                           charset='utf8mb4', autocommit=True)  # 链接服务器
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = 'insert into new(name,pwd) values(%s,%s)'
    cursor.executemany(sql, [('jack', 123), ('lebron', 123), ('lisa', 123)])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    as语法 给字段起别名、起表名 (为了见名知意)

    select name as '名称' from new;	# name后面跟上as 输入新的名称即可
    
    • 1

    在这里插入图片描述

    comment语法 # 给表、字段添加注释信息

     	create table server(id int) comment '这个server意思是服务器表'
    	create table t1(
           id int comment '用户编号',
           name varchar(16) comment '用户名'
        ) comment '用户表';
       
       '''
       	两个可以查询注释的地方
       		show create table 表名
       		use information_schema 默认没有权限直接查看
       '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    concat、concat_ws语法
    concat用于分组之前多个字段数据的拼接
    concat_ws如果有多个字段 并且分隔符一致 可以使用该方法减少代码

    select concat(name,pwd) from new;
    select concat_ws('|',name,pwd) from new;
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述

    exists语法
    exists后面的sql语句如果有结果那么执行前面的sql语句 如果后面没有结果则不执行

    select * from emp1 where exists (select * from emp where id < 10);
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点点赞收藏+关注 谢谢支持 !!!

  • 相关阅读:
    汽车租贷管理系统简单实现
    目录启示:PHP 中 命名空间及其成员的访问
    Android——解决BottomNavigationView+Fragment重建与重叠问题
    瑞吉外卖项目(二)
    Cesium加载地图服务
    Oracle database 21c 新特性:密码逐步切换策略
    【ARM】ARM Cortex 处理器详细讲解
    Java8Stream快速使用
    橘子学JVM之GUI监控02之Visual VM
    信奥中的数学:抽屉原理
  • 原文地址:https://blog.csdn.net/MeiJin_/article/details/126412883