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. Syntax error: "(" unexpected shell里面的报错解决

    author:headsen  chen date : 2019-08-08  11:11:38 notice : 个人原创 Ubuntu上运行shell脚本总是报下面这个错误,在centos下面或者 ...

  2. Kotlin 之操作符重载

    Kotlin 之操作符重载   参考: kotlin in action kotlin 官方参考文档 运算符重载 Kotlin允许我们为自己的类型提供预定义的一组操作符实现(这些操作符都对应的成员函数 ...

  3. prometheus + influxdb + grafana + mysql

    前言 本文介绍使用influxdb 作为prometheus持久化存储和使用mysql 作为grafana 持久化存储的安装方法 一 安装go环境 如果自己有go环境可以自主编译remote_stor ...

  4. 从0开始学爬虫10之urllib和requests库与github/api的交互

    urllib库的使用 # coding=utf-8 import urllib2 import urllib # htpbin模拟的环境 URL_IP="http://10.11.0.215 ...

  5. OpenGL ES3使用MSAA(多重采样抗锯齿)的方法

    昨晚花费了我2个多小时的时间终于把OpenGL ES3.0中的MSAA给搞定了.在OpenGL ES2.0中,Khronos官方没有引入标准的MSAA全屏抗锯齿的方法,而Apple则采用了自己的GL_ ...

  6. ES6深入浅出-10 ES6新增的数据类型-3.其他类型

    Map类型 Map 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map Ma ...

  7. ES6深入浅出-5 新版对象-1.如何创建对象

    对象属性的加强: 可以通过new Object(), Object.create()方法,或者使用字面量标记(初始化标记)初始化对象. 一个对象初始化器,由花括号/大括号 ({}) 包含的一个由零个或 ...

  8. PAT 甲级 1071 Speech Patterns (25 分)(map)

    1071 Speech Patterns (25 分)   People often have a preference among synonyms of the same word. For ex ...

  9. Java Sound : audio inputstream from pcm amplitude array

    转载自:http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/java-sound-making-audio-input-stream.html In ...

  10. 【sqlalchemy】

    https://www.cnblogs.com/ccorz/p/5711955.html