数据库
首页 > 数据库> > Navicat,pymysql,SQL注入问题

Navicat,pymysql,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