Navicat可视化工具的使用、pymysql、sql注入问题

一、Navicat 可视化工具的使用

1、Navicat [1]  是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。

它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,

让你可以以安全并且简单的方式创建、组织、访问并共用信息。

#要求掌握
    1;测试+连接数据库
    2:新建库
    3:新建表,新增字段+类型+约束条件的创建
    4:设计表:外键
    5:新建查询
    6:建立表的模型
    7:转储/运行SQL文件
    8:通过模型多表之间查询,输入命令

#注意  批量加注释:ctrl+?建  批量去注释:CTRL+shift+?建   

2、 软件操作界面及使用注意事项:

3、新建库时注意事项:

4、可以把建好的表转储为SQL文件保存下来,可以把新的SQL文件直接添加并运行(可以直接利用别人建好的框架模型或数据)

二、练习题:(多表之间的查询)

1、查询所有的课程的名称以及对应的任课老师姓名
4、查询平均成绩大于八十分的同学的姓名和平均成绩
7、 查询没有报李平老师课的学生姓名
8、 查询没有同时选修物理课程和体育课程的学生姓名
9、 查询挂科超过两门(包括两门)的学生姓名和班级

# 解题步骤:
    把复杂的问题拆分,按条件拆分一步一的写,再基于上一次查询的结果再做条件筛选

1:查询所有的课程的名称以及对应的任课老师姓名

解题思路:(1):先采用连表操作 inner join(内连接把老师和课程的信息查找)   

select *from course inner join teacher on course.teacher_id =teacher.tid; 内连接查找

      (2):在找到老师和课程的基础上,再查找课程对应的老师信息

        把 * 换成要查找的内容即可:

SELECT
    course.cname,
    teacher.tname
FROM
    course
INNER JOIN teacher ON course.teacher_id = teacher.tid;

2:查询平均成绩大于八十分的同学的姓名和平均成绩

‘‘‘SELECT
    student.sname,
    t1.avg_num
FROM
    student       # 第二步:查询学生符合符合条件的学生 再用avg
INNER JOIN (
    SELECT
        student_id,
        avg(num) AS avg_num
    FROM
        score      # 第一步:先查找平均成绩大于80分的同学
    GROUP BY
        student_id
    HAVING        # 分组后的条件筛选
        avg(num) > 80
) AS t1 ON student.sid = t1.student_id;‘‘‘

3: 查询没有报李平老师课的学生姓名(找出报名李平老师课程的学生,然后取反就可以)

SELECT
    student.sname
FROM
    student
WHERE
    sid NOT IN (
        SELECT DISTINCT
            student_id
        FROM
            score
        WHERE
            course_id IN (
                SELECT
                    course.cid
                FROM
                    course
                INNER JOIN teacher ON course.teacher_id = teacher.tid
                WHERE
                    teacher.tname = ‘李平老师‘
            )
    );

4、 查询没有同时选修物理课程和体育课程的学生姓名(没有同时选修指的是选修了一门的,

  思路是得到物理+体育课程的学生信息表,然后基于学生分组,统计count(课程)=1)

SELECT
    student.sname
FROM
    student
WHERE
    sid IN (
        SELECT
            student_id
        FROM
            score
        WHERE
            course_id IN (
                SELECT
                    cid
                FROM
                    course
                WHERE
                    cname = ‘物理‘
                OR cname = ‘体育‘
            )
        GROUP BY
            student_id
        HAVING
            COUNT(course_id) = 1
    );

5、查询挂科超过两门(包括两门)的学生姓名和班级

select student.sname,class.caption from class INNER JOIN student
    on class.cid = student.class_id
    WHERE student.sid in
    (select student_id from score where num < 60
    GROUP BY student_id
    HAVING COUNT(course_id) >=2)

三、pymysql 模块

  命令行安装: pip insatll mysql  用Python来实现操作mysql

import pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘  # 编码千万不要加- 如果写成了utf-8会直接报错
)
# 向mysqld服务端发送请求连接

cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象 以字典的形式返回查询出来的数据
# 键是表的字段 值是表的字段对应的信息
sql = ‘select * from teacher‘

cursor.execute(sql)    # 执行传入的sql语句
print(cursor.fetchone())  # 只获取一条数据
print(cursor.fetchone())  # 只获取一条数据

# cursor.scroll(2,‘absolute‘)  # 控制光标移动   absolute相对于其实位置 往后移动几位
cursor.scroll(1,‘relative‘)    # relative相对于当前位置 往后移动几位
print(cursor.fetchall())    # 获取所有的数据  返回的结果是一个列表

四、mysql 注入问题

  解决在输入没有密码或者用户名错误的情况下也能访问数据的问题

# 2.代码链接
import pymysql
#链接
conn=pymysql.connect(
  host=‘localhost‘,
  user=‘root‘,
  password=‘123‘,
  database=‘egon‘,
  charset=‘utf8‘)
#游标
cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
#cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)  # 以字典的方式显示数据

# 3.pymysql操作数据库
#执行sql语句
user = input(">>>:").strip()
pwd = input(">>>:").strip()
sql=‘select * from userinfo where name="%s" and password="%s"‘ %(user,pwd) #注意%s需要加引号

rows=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
# 获取真实数据cursor.fetchone(),cursor.fetchall(),cursor.fetchmany(),类似管道取值,获取一条,所有,多条

cursor.scroll(1,‘relative‘)  # 相对移动
cursor.scroll(3,‘absolute‘)  # 绝对移动

cursor.close()
conn.close()

sql注入的问题:

  通过修改验证方式,解决在没有输入正确的用户名和密码时也能获取数据的情况

import  pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘  # 编码千万不要加- 如果写成了utf-8会直接报错
)
cursor = conn.cursor(pymysql.cursors.DictCursor)

username =input(‘username>>>:‘).strip()
password = input(‘password>>>:‘).strip()

sql ="select * from userinfo where name = %s and password = %s"
print(sql)
res = cursor.execute(sql,(username,password)) # execute 会自动识别sql语句中的%s 帮你做替换
if res:
    print(cursor.fetchall())
else:
    print("用户名和密码错误!")

结果:username>>>:jamespassword>>>:123select * from userinfo where name = %s and password = %s[{‘id‘: 2, ‘name‘: ‘james‘, ‘password‘: ‘123‘}]
"""
sql注入 就是利用注释等具有特殊意义的符号 来完成一些骚操作
后续写sql语句  不要手动拼接关键性的数据
而是让excute帮你去做拼接

"""
sql ="select * from userinfo where name = %s and password = %s" %(username,password)res = cursor.execute(sql)

如果这么写的话会出现注入问题:利用mysql -- 注释的语法实现破解密码 如输入:Jack‘-- bhgdj 或 xxx‘ or 1=1 没有密码不知道用户名也能获取数据

五、增删改

 conn.commit()   手动提交

autocommit = True  自动提交

import  pymysql

conn = pymysql.connect(
    host = ‘127.0.0.1‘,
    port = 3306,
    user = ‘root‘,
    password = ‘123‘,
    database = ‘day38‘,
    charset = ‘utf8‘,  # 编码千万不要加- 如果写成了utf-8会直接报错
autocommit = True  # 这个参数配置完成后  增删改操作都不需要在手动加conn.commit了
)
cursor = conn.cursor(pymysql.cursors.DictCursor)

sql = ‘insert into userinfo (name,password) values("jerry","666")‘
# sql = ‘update userinfo set name = "jasonhs" where id = 1‘
# sql = ‘delete from userinfo  where id = 2‘
cursor.execute(sql)

# conn.commit()

"""
增删改操作 都必须加一句
conn.commit()操作
"""

  

  

      

  

原文地址:https://www.cnblogs.com/Gaimo/p/11394492.html

时间: 2024-10-10 01:43:04

Navicat可视化工具的使用、pymysql、sql注入问题的相关文章

exist 存在 Python操作mysql pymysql sql注入问题 # 39

0.补充 exist 存在 了解.py 1 """""" 2 """ 3 '''exist''' 4 EXIST 关键字表示存在 5 在使用EXIST 关键字时 , 6 7 内层查询语句不返回 查询的记录, 8 而是返回一个真假值 ,True|False 9 10 当返回True时,外层语句将进行查询, 11 当返回值为False 外层查询语句不进行查询 12 13 select * from emp where e

安全测试工具Acunetix、appscan,sql注入

appscan:Acunetix是全球排名前三的漏洞厂商,同类产品包括Nessus,Qualys sql注入 SQL注入攻击属于数据库安全攻击手段之一,可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫.数据库加密.数据库防火墙.数据脱敏.数据库安全审计系统. SQL注入攻击会导致的数据库安全风险包括:刷库.拖库.撞库. SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问 防止SQL注入攻击 没什么区别,所以市面的防火墙都不会对SQL注入发出警报,如

MySQL篇之Navicat可视化工具

主要内容: Navicat工具的介绍和使用 1.介绍和下载安装 <1>介绍 Navicat是一款针对MySQL数据库开发的可视化管理工具,以图形界面的形式操作MySQL数据库. 但在生产环境中操作MySQL数据库还是推荐使用命令行. <2>下载安装 官网下载:https://www.navicat.com/en/products/navicat-for-mysql 网盘下载:https://pan.baidu.com/s/1bpo5mqj 2.使用 <1>测试,链接数据

多表查询、可视化工具、pymysql模块

create table dep( id int primary key auto_increment, name varchar(16), work varchar(16) ); create table emp( id int primary key auto_increment, name varchar(16), salary float, dep_id int ); insert into dep values(1, '市场部', '销售'), (2, '教学部', '授课'), (3

SqL注入攻击实践

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出原理 缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量.溢出的数据覆盖在合法数据上.理想情况是,程序检查数据长度并且不允许输入超过缓冲区长度的字符串.但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋下隐患. 原理 针对mysql数据库 check_connection (sql_parse.cc): / Old clients send null-terminated str

SQL注入详解-转发

转发自飞天小子如有侵权请联系删除 1:什么是SQL注入 SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行. www.xx.com/news.php?id=1 www.xx.com/news.php?id=1 and 1=1 这里我们来理解一下SQL注入 首先,SQL注入常年蝉联OWASP排行榜第一名~ SQL注入产生的过程是怎样的呢?见下图 SQL注入的危害有哪些呢? 数据库信息泄露 网页篡改 网站被挂马 数据库被恶意

Navicat工具、pymysql模块 sql注入

cls超 Navicat工具.pymysql模块 阅读目录 一 IDE工具介绍 二 pymysql模块 一 IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mysql服务端的一个工具,并且他是图形界面版的.我们使用它和直接使用命令行的区别就类似linux和windows系统操作起来的一个区别. 下载链接:https://pan.baidu.com/s/

mysql创建和用户授权,可视化工具Navicat的基本使用,pymysql模块的使用

一.创建mysql,授权 权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操作.那么一般情况在公司之后DBA工程师会创建一个用户和密码,让你去连接数据库的操作,并给当前的用户设置某个操作的权限(或者所有权限).那么这时就需要我们来简单了解一下: 如何创建用户和密码 给当前的用户授权 移除当前用户的权限 如果你想创建一个新的用户,则需要以下操作: 1.进入到mysql数据库下 mysql> use

可视化工具Navicat的使用/pymysql模块的使用

一.可视化工具Navicat的使用 1.官网下载:http://www.navicat.com/en/products/navicat-for-mysql 2.网盘下载:http://pan.baidu.com/s/1bpo5maj 3.需要掌握的基本操作:   PS:在生产环境中操作MySQL数据库还是推荐使用命令工具mysql,但我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 二.pymysql模块的使用 1.pymysql的下载和使用 之前我们都