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

Navicat,pymysql,SQL注入问题

时间:2022-08-18 19:23:17浏览次数:82  
标签: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
From: https://www.cnblogs.com/scx-xiaochun/p/16599362.html

相关文章

  • sql连接问题
    EstablishingSSLconnectionwithoutserver'sidentityverificationisnotrecommended.AccordingtoMySQL5.5.45+,5.6.26+and5.7.6+requirementsSSLconnecti......
  • 【MySQL】SQL99版本新特性:自然连接、USING
    1.自然连接NATURALJOIN:它会帮你自动查询两张连接表中所有相同的字段,然后进行等值连接。不够灵活。SELECTemployee_id,last_name,department_nameFROMemployeese......
  • kepserverEX 5.11通过ODBC连接mysql提示"Failed to automatically generate tags for
    kepserverEX5.11连接mysql,测试连接数据库正常,但是建立设备后提示错误: DateTimeLevelSourceEvent2022-08-1818:24:12ErrorODBCClient......
  • 【MySQL】多表查询7种SQL JOIN的实现
    目录两个表关联有这7种情况1.内连接2.左外连接3.右外连接4.A-A∩B5.B-A∩B6.满外连接7.去除交集部分两个表关联有这7种情况1.内连接SELECTemployee_id,departmen......
  • pgsql存储函数简单使用
    CREATEORREPLACEFUNCTION"public"."generate_road_list_id_to_jcpddas"("road_code_param"varchar)RETURNS"pg_catalog"."int4"AS$BODY$declarereturnvalue......
  • 【MySQL】合并查询结果UNION
    1.UNION合并多条SELECT语句的查询结果,两个表对应的列数和数据类型必须相同,并且相互对应。会执行去重操作。2.UNIONALL不会执行去重操作如果明确知道合并数据后的结......
  • 【MySQL】多表查询:内连接VS外连接
    区别:内连接只取两张表中满足where条件的部分(交集部分),外连接除了取满足的部分还会取不满足的部分。因此外连接又可以分为:左外连接、右外连接、全外连接。1.内连接SQL92内......
  • SQL SERVER 2008 复制所有表结构、触发器、存储过程、视图等(海典传输初始化)(二)(对一中的
    一、对于p_get_usertable中的语句:1、获取所有用户表(并且架构为dbo。感觉可以不要该限制)的表名:selecta.namefromsysobjectsa,sysusersbwherea.xtype='u'an......
  • canal同步mysql实战
    环境mysql5.6.41canal1.151.16测试过后,一直报错canal_config表不存在,更换版本后正常目的:同步一个数据库中的二个表1、创建表CREATETABLE`user01`(`id`int(......
  • CentOS7安装mysql5.7
    非原创,用到了,所以在这里记录一下。摘自:centos7安装mysql5.7步骤(图解版)_小志的博客的博客-CSDN博客_centos7安装mysql5.7目录一、下载mysql5.7安装包二、mysql5.7......