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. 使用.whl文件安装torch和pytorch的方法

    当使用pip install torch torchvision命令下载感觉很慢时 可以先到下面的网页将.whl文件下载下来,然后再运行安装即可: torchvision也是 下载好了以后,运行: p ...

  2. ES6深入浅出-9 Promise-1.回调与回调地狱

    promise 回调 把fun的调用写在另外一个函数里 fun()的调用在fn2这个函数里面.也是调用了函数.这种函数的调用形式叫做回调. A打电话给C找B.但是B不在,C说等B在的时候让B给A回电话 ...

  3. extends 类的继承 / super关键字,调用继承类里面的函数和变量

    Son 继承Father 当其他脚本想调用 Father类里面的变量 or 方法 可以把 Son r=new Son()   等价于 Father r=new Father() 注意: 函数只能单继承 ...

  4. redis添加到linux系统服务

    http://blog.csdn.net/justfor3l/article/details/53187795

  5. 如何修改WAMPServer默认的网站路径地址

    通常,我们安装WAMPServer集成的PHP开发环境之后,默认的网站路径地址是其安装目录下子文件夹:"wamp/www/".那么我们怎么修改网站地址到自己指定的路径呢?本篇经验将 ...

  6. Intellij IDEA Debug 多模块下断点目标源问题

    Ctrl+Alt+S进入Settings,选择Debugger->show alternative source switcher 勾选,开启显示替代源选择器 由于项目工程存放了多个应用模块,包 ...

  7. Exchanger实现线程间数据交换

    package com.duchong.concurrent; import java.util.ArrayList; import java.util.List; import java.util. ...

  8. 【JS】实用/常用函数/Function方法

    1.获取日月 时分秒 //获取 月日 getMonth=(time)=>{ var date = new Date(time) <?):(date.getMonth()+) ?'+date ...

  9. 虚拟机中windows下制作超级隐藏账户

    这篇博客非原创,我只是将很多大佬写的东西理解了一下写了出来. 接下来的实验最好在虚拟机进行,因为可以快照~ 制作隐藏用户可以说是两种方法但是基本操作一样,所以我们穿插着进行一种是隐藏账户,一种是影子账 ...

  10. 【转帖】K8S Deployment 命令

    K8S Deployment 命令 https://www.cnblogs.com/Tempted/p/7831604.html 今天学习了一下 kubectl scale deployment xx ...