一、navicat介绍

navicat是一个能够方便我们用更简单的方式操作数据库的工具

1 基本使用

创建连接,然后创建库,创建表,写字段都是一些常规操作,如果要进一步了解数据库,去看模型,也可以自动生成sql语句

2 练习题

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

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

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

SELECT
student.sname,
avg(score.num)
FROM
student
JOIN score ON student.sid = score.student_id
GROUP BY
score.student_id
HAVING
avg(num) > 80

2.3 查询没有报李平老师课的学生姓名

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

2.4 查询没有同时选修物理课程和体育课程的学生姓名

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

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

SELECT
student.sname,
class.caption
FROM
student
JOIN class ON student.class_id = class.cid
WHERE
student.sid IN (
SELECT
score.student_id
FROM
score
HAVING
COUNT(score.num < 60) >= 2
);

二、pymysql模块

pymysql是python中通过python语句对数据库进行操作的模块

pip3 install pymysql 导入模块

基本使用

import pymysql

conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = 'root',
database = 'day46', # 指定我们要编写的库
charset = 'utf8'# 不能写成utf-8
) # 链接数据库 cursor = conn.cursor() # 产生一个游标对象,相当于我们已经链接mysql正在准备输入指令 通常不使用
cursor = conn.cursor(cursor=pymysql.cursors.Dictcursor) # 通常使用这一种,获取数据更明确
sql = 'select * from teacher;'
res = cursor.execute(sql)
# execute 返回的是当前sql语句得到数据的行数 通常不用
# print(cursor.fetchone()) # 得到一条数据
# print(cursor.fetchmany(res)) # 得到全部
# print(cursor.fetchmany()) # 不指定时得到一个数据
print(cursor.fetchall()) # 得到全部数据
cursor.scroll(1,'relative') # 相对当前运动 相对于光标向后移动一个单位,等于跳过下一个数据
cursor.scroll(1,'absolute') # 相对开头运动 相对于开头运动一个单位,光标从这开始

三、sql注入

当我们需要让用户去写一些sql代码时,比如说以用户输入的信息去数据库中搜索,如果用户输入的是一些可以操作数据库的代码,就会造成sql注入

# 登录功能
import pymysql conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '123456',
database = 'day48',
charset = 'utf8' # 编码千万不要加-
) # 链接数据库
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) username = input('>>>:')
password = input('>>>:')
sql = "select * from user where name=%s and password=%s",%(username,passowrd) if rows:
print('登录成功')
print(cursor.fetchall())
else:
print('用户名密码错误') # 如果我们在输入用户名的时候输入 -- 相当于mysql中的注释,直接把密码搜索注释掉了,就不用验证了
"""
利用一些语法的特性 书写一些特点的语句实现固定的语法
MySQL利用的是MySQL的注释语法
select * from user where name='jason' -- jhsadklsajdkla' and password='' select * from user where name='xxx' or 1=1 -- sakjdkljakldjasl' and password=''
"""

总结:利用一些语法的特性 书写一些特点的语句实现固定的语法

MySQL利用的是MySQL的注释语法

sql注入解决方法

#日常生活中很多软件在注册的时候都不能含有特殊符号
#因为怕你构造出特定的语句入侵数据库 不安全 # 敏感的数据不要自己做拼接 交给execute帮你拼接即可
# 结合数据库完成一个用户的登录功能?
import pymysql conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '123456',
database = 'day48',
charset = 'utf8' # 编码千万不要加-
) # 链接数据库
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) username = input('>>>:')
password = input('>>>:')
sql = "select * from user where name=%s and password=%s"
# 不要手动拼接数据 先用%s占位 之后将需要拼接的数据直接交给execute方法即可
print(sql)
rows = cursor.execute(sql,(username,password)) # 自动识别sql里面的%s用后面元组里面的数据替换
if rows:
print('登录成功')
print(cursor.fetchall())
else:
print('用户名密码错误')

day48 navicat使用及pymysql的使用的更多相关文章

  1. 第八章| 3. MyAQL数据库|Navicat工具与pymysql模块 | 内置功能 | 索引原理

    1.Navicat工具与pymysql模块 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数 ...

  2. Navicat工具、pymysql模块 sql注入

    cls超 Navicat工具.pymysql模块 阅读目录 一 IDE工具介绍 二 pymysql模块 一 IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试, ...

  3. mysql之Navicat工具、pymysql模块

    1. IDE工具介绍(Navicat) 为了方便测试,使用IDE工具,就是Navicat,这个工具本质上就是一个socket客户端,可视化的连接mysql服务端的一个工具,并且是图形界面版的.它和直接 ...

  4. python 全栈开发,Day63(子查询,MySQl创建用户和授权,可视化工具Navicat的使用,pymysql模块的使用)

    昨日内容回顾 外键的变种三种关系: 多对一: 左表的多 对右表一 成立 左边的一 对右表多 不成立 foreign key(从表的id) refreences 主表的(id) 多对多 建立第三张表(f ...

  5. 数据库 --- 4 多表查询 ,Navicat工具 , pymysql模块

    一.多表查询 1.笛卡儿积 查询 2.连接 语法: ①inner    显示可构成连接的数据 mysql> select employee.id,employee.name,department ...

  6. 8-5 Navicat工具与pymysql模块

    一 Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 需要掌握的基本操作 ...

  7. Navicat工具、pymysql模块、数据备份

    IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mys ...

  8. Navicat工具、pymysql模块

    一 IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接m ...

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

    一.可视化工具Navicat的使用 1.官网下载:http://www.navicat.com/en/products/navicat-for-mysql 2.网盘下载:http://pan.baid ...

随机推荐

  1. Cypress系列(16)- 查找页面元素的基本方法

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前端页面代码 后面写的 Cypress ...

  2. 微信小程序实现连续扫码功能(uniapp)

    注:本文使用的是 uniapp 语法. 微信小程序提供了扫码API:wx.scanCode,但它只能扫一次码,想要实现连续扫码,需要借用 camera 组件.camera 组件不仅能拍照,还具有扫码功 ...

  3. HashMap(三)之源码分析

    通过分析HashMap来学习源码,那么通过此过程我们要带着这几个问题去一起探索 为什么要学习源码 怎么去学习 0.1 为什么要学习源码 这个问题,直接给出结论,学习源码肯定是有好处的,比如: 学习优秀 ...

  4. 【javascript的那些事】等待加载完js后执行方法

    很多时候,你也许会碰到 使用的情景: js文件b.js还没有从服务器端加载到web端,而吧a.js中已经调用了b.js中的方法 实例: 这里是加载echart的时候碰到的具体实例 引入js " ...

  5. v-model 指令来实现双向数据绑定

    <div id="app"> <p>{{ message }}</p> <input v-model="message" ...

  6. grafana 如何对数据进行切分

    也就是如何增加筛选,根据想要的条件筛选不同的内容,数据源是prometheus 效果 设置variable 正则表达式 匹配url中IP和端口 切片进阶 根据前一个切片 再过滤 含义说明 instan ...

  7. SSH原理常见应用升级及端口转发

    SSH介绍 SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定:在进行数据传输之前,SSH先对联机数据包通过加密技术进行 ...

  8. 使用addEventListener绑定事件是关于this和event记录

    DOM元素使用addEventListener绑定事件的时候经常会碰到想把当前作用域传到函数内部,可以使用以下两种放下: var bindAsEventListener=function (objec ...

  9. Spring boot+Mybatisplus用AR模式实现逻辑删除操作

    Mybatisplus的AR模式 Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.ActiveRecord ...

  10. MongoDB副本集replica set (二)--副本集环境搭建

    (一)主机信息 操作系统版本:centos7 64-bit 数据库版本   :MongoDB 4.2 社区版 ip hostname 192.168.10.41 mongoserver1 192.16 ...