ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Navicat,pymysql,SQL注入问题

2022-08-18 19:33:12  阅读:160  来源: 互联网

标签:pymysql Navicat cursor SQL where select


  • Navicat可视化软件

    • 什么是Navicat?

  • pyton操作MySQL

  • SQL注入问题

  • 小知识点补充


Navicat可视化软件

什么是Navicat?

1. Navicat是一个可多重连接的数据库管理工具

2. 它可以连接到MySQL、Oracle、PostgreSQL、SQLite、SQL Server和/或MariaDB数据库,让数据库管理更加方便

3. Navicat可以简便、安全地创建、组织、访问和共享信息

官网下载Navicat:Navicat | 下载 Navicat for MySQL 14 天免费 Windows、macOS 和 Linux 的试用版

注意:

  为了提高开发的效率 但是不能太过于依赖该软件 其实这些软件的底层还是执行的SQL语句来操作数据库的,只不过是将SQL语句封装到软件内。 


python操作MySQL

首先,你要下载一个第三方模块:pymysql

    方法一:在cmd终端根据你的python环境下载,我的是3.8

        pip3.8 install pymysql

    方法二:在pycharm内部下载  file>>settings>>Python Interpreter>>选择上面的加号>>输入pymysql>>点击install package

1.链接服务端

import pymysql


# 1.链接服务端
conn = pymysql.connect(
    host='127.0.0.1',  # 主机ip地址
    port=3306,  # 服务端接口
    user='root',    # 用户名
    password='123',  # 密码
    database='db1',  # 想要链接的库
    charset='utf8mb4', # 编码,防止乱码
    autocommit=True  # 执行增、改、删操作自动执行conn.commit
)

2.产生一个游标对象(等待输入命令)

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

3.编写SQL语句

sql1 = 'select * from userinfo'

4.发送给服务端

cursor.execute(sql1)

5.获取命令的执行结果

res = cursor.fetchall()
print(res)

获取结果

cursor.fetchone()   # 获取结果集中一条数据
cursor.fetchall()   # 获取结果集中所有数据
cursor.fetchmany()  # 获取结果集中指定条的数据
'''类似于文件光标的概念'''
# cursor.scroll(2, mode='relative')  # 基于当前位置往后移动
cursor.scroll(0, mode='absolute')  # 基于数据集开头的位置往后移动

 


SQL注入问题

前戏
	只需要用户名即可登录
 	不需要用户名和密码也能登录
问题
	SQL注入
	select * from userinfo where name='jason' -- haha' and pwd=''
	select * from userinfo where name='xyz' or 1=1  -- heihei' and pwd=''
本质
	利用一些特殊符号的组合产生了特殊的含义从而逃脱了正常的业务逻辑
措施
	针对用户输入的数据不要自己处理 交给专门的方法自动过滤
    sql = "select * from userinfo where name=%s and pwd=%s"
    cursor.execute(sql, (username, password))  # 自动识别%s 并自动过滤各种符合 最后合并数据
补充
	 cursor.executemany()

 


小知识点补充(了解)

1.as语法
	给字段起别名、起表名
2.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
	"""
3.concat、concat_ws语法
	concat用于分组之前多个字段数据的拼接
 	concat_ws如果有多个字段 并且分隔符一致 可以使用该方法减少代码
4.exists语法
	select * from userinfo where exists (select * from department where id<100)
	exists后面的sql语句如果有结果那么执行前面的sql语句
	如果没有结果则不执行

 

标签:pymysql,Navicat,cursor,SQL,where,select
来源: https://www.cnblogs.com/scx-xiaochun/p/16599362.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有