Navicat使用

下载地址:<https://pan.baidu.com/s/1bpo5mqj>

Navicat是基于mysql操作的,所以能否自主完成一些练习,就能够运用Navicat

练习时需要用到的数据:

Navicat Premium Data Transfer

 Source Server         : localhost
Source Server Type : MySQL
Source Server Version : 50624
Source Host : localhost
Source Database : sqlexam Target Server Type : MySQL
Target Server Version : 50624
File Encoding : utf-8 Date: 10/21/2016 06:46:46 AM
*/ SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for `class`
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`caption` varchar(32) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of `class`
-- ----------------------------
BEGIN;
INSERT INTO `class` VALUES ('', '三年二班'), ('', '三年三班'), ('', '一年二班'), ('', '二年九班');
COMMIT; -- ----------------------------
-- Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(32) NOT NULL,
`teacher_id` int(11) NOT NULL,
PRIMARY KEY (`cid`),
KEY `fk_course_teacher` (`teacher_id`),
CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of `course`
-- ----------------------------
BEGIN;
INSERT INTO `course` VALUES ('', '生物', ''), ('', '物理', ''), ('', '体育', ''), ('', '美术', '');
COMMIT; -- ----------------------------
-- Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`course_id` int(11) NOT NULL,
`num` int(11) NOT NULL,
PRIMARY KEY (`sid`),
KEY `fk_score_student` (`student_id`),
KEY `fk_score_course` (`course_id`),
CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),
CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of `score`
-- ----------------------------
BEGIN;
INSERT INTO `score` VALUES ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', ''), ('', '', '', '');
COMMIT; -- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`gender` char(1) NOT NULL,
`class_id` int(11) NOT NULL,
`sname` varchar(32) NOT NULL,
PRIMARY KEY (`sid`),
KEY `fk_class` (`class_id`),
CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of `student`
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES ('', '男', '', '理解'), ('', '女', '', '钢蛋'), ('', '男', '', '张三'), ('', '男', '', '张一'), ('', '女', '', '张二'), ('', '男', '', '张四'), ('', '女', '', '铁锤'), ('', '男', '', '李三'), ('', '男', '', '李一'), ('', '女', '', '李二'), ('', '男', '', '李四'), ('', '女', '', '如花'), ('', '男', '', '刘三'), ('', '男', '', '刘一'), ('', '女', '', '刘二'), ('', '男', '', '刘四');
COMMIT; -- ----------------------------
-- Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`tid` int(11) NOT NULL AUTO_INCREMENT,
`tname` varchar(32) NOT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of `teacher`
-- ----------------------------
BEGIN;
INSERT INTO `teacher` VALUES ('', '张磊老师'), ('', '李平老师'), ('', '刘海燕老师'), ('', '朱云海老师'), ('', '李杰老师');
COMMIT; SET FOREIGN_KEY_CHECKS = 1;

拷贝上述代码,新建一个.sql文件,保存到桌面

打开navicat新建数据库day41,选中新建的数据库鼠标右键选择运行SQL文件

弹出文件框,选中刚刚保存到桌面的.sql文件即可

练习题:

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

参考答案

1、查询所有的课程的名称以及对应的任课老师姓名
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
INNER JOIN (
  SELECT
    student_id,
    avg(num) AS avg_num
  FROM
    score
  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)
  ;

用Python操作数据库

python
1.安装:pip3 insatll pymysql

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()

完整的操作示例:

import pymysql

conn = pymysql.connect(
  host = '127.0.0.1',
  port = 3306,
  user = 'root',
  password = '',
  database = 'day41',
  charset = 'utf8'
)
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 将查询结果做成字典的格式
res = cursor.execute("select * from class")
print(res)   # 查询到的数据总条数
print(cursor.fetchone())    # 获取一条查询结果
# print(cursor.fetchone())    # 获取一条查询结果
# print(cursor.fetchone())    # 获取一条查询结果
# cursor.scroll(1,'absolute')    # 绝对移动,参照开始位置
cursor.scroll(1,'relative')
print(cursor.fetchone())
# print(cursor.fetchall())    # 获取所有查询到的数据

sql注入问题

import pymysql

conn = pymysql.connect(
  host = '127.0.0.1',
  port = 3306,
  user = 'root',
  password = '',
  database = 'day41',
  charset = 'utf8',
  autocommit = True
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
username = input('username>>>:')
password = input('password>>>:')
sql = "insert into userinfo(name,password) values(%s,%s)"
# sql = "update userinfo set name='jasonhs' where id =1"
# sql = "select * from userinfo where name=%s and password=%s"
res = cursor.execute(sql,(username,password))
# res = cursor.execute(sql)
# conn.commit()    # 确认数据无误之后 commit之后才会将数据真正修改到数据库
print(sql)
if res:
  # print(cursor.fetchall())
  pass
else:
  print('用户名或密码错误!')

不要手动去拼接查询的sql语句

username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where username='%s' and password='%s'"%(username,password)

用户名正确
  username >>>: jason' -- jjsakfjjdkjjkjs
用户名密码都不对的情况
  username >>>: xxx' or 1=1 --asdjkdklqwjdjkjasdljad
  password >>>: ''

增删改

# 增
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.excute(sql,('jason','123'))

# 修改
sql = "update user set username='jasonDSB' where id=1"
rows = cursor.excute(sql)

增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改

# 一次插入多行记录
res = cursor,excutemany(sql,[(),(),()]

navicate的使用及用Python操作数据额库的更多相关文章

  1. Python的常用库

    读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...

  2. Python底层socket库

    Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...

  3. 【C++实现python字符串函数库】strip、lstrip、rstrip方法

    [C++实现python字符串函数库]strip.lstrip.rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' '). s.st ...

  4. 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  5. 【C++实现python字符串函数库】一:分割函数:split、rsplit

    [C++实现python字符串函数库]split()与rsplit()方法 前言 本系列文章将介绍python提供的字符串函数,并尝试使用C++来实现这些函数.这些C++函数在这里做单独的分析,最后我 ...

  6. python使用cookielib库示例分享

    Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持,下面是使用示例 该模块主要功能是提供可存储cookie的对象.使用此模块捕获 ...

  7. Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED

    Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...

  8. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  9. Python 图形 GUI 库 pyqtgraph

    原文  Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...

随机推荐

  1. 我是如何同时拿到阿里和腾讯offer的 【转载】

    前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...

  2. Spring cloud微服务安全实战-6-2JWT认证之认证服务改造

    首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...

  3. 报错 react-hot-loader

    ./node_modules/element-react/dist/npm/es5/libs/animate/index.js Module not found: Can't resolve 'rea ...

  4. 利用VisualSVN修改配置库名称

    相信大家都听说过SVN的大名,至于它的用途以及如何安装不在本文范围内,这里主要讲解如何利用VisualSVN来更改配置库的名称,前提是你的SVN服务必须用VisualSVN搭建,网上几乎没有这方面的文 ...

  5. mysql查看和设置最大连接数

    .查看最大连接数 SHOW VARIABLES LIKE '%max_connections%'; .修改最大连接数 ;

  6. 《ucore lab1》实验报告

    资源 ucore在线实验指导书 我的ucore实验代码 练习1:理解通过make生成执行文件的过程 详见<ucore lab1 exercise1>实验报告 练习2:使用qemu执行并调试 ...

  7. RestTemplate对象的使用

  8. AES加密、解密(linux、window加密解密效果一致,支持中文)

    转自: http://sunfish.iteye.com/blog/2169158 import java.io.UnsupportedEncodingException; import java.s ...

  9. LeetCode 279. 完全平方数(Perfect Squares) 7

    279. 完全平方数 279. Perfect Squares 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数 ...

  10. 修改Linux服务器中的MySql密码

    1.可以直接在数据库中修改,因为知道root密码,所以直接登录 mysql -uroot -p 2.查看一下数据库,修改root密码需要使用如下图所示的mysql数据库 3.通过use mysql指明 ...