zoukankan      html  css  js  c++  java
  • 三十七、python操作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 ('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班');
    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 ('1', '生物', '1'), ('2', '物理', '2'), ('3', '体育', '3'), ('4', '美术', '2');
    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 ('1', '1', '1', '10'), ('2', '1', '2', '9'), ('5', '1', '4', '66'), ('6', '2', '1', '8'), ('8', '2', '3', '68'), ('9', '2', '4', '99'), ('10', '3', '1', '77'), ('11', '3', '2', '66'), ('12', '3', '3', '87'), ('13', '3', '4', '99'), ('14', '4', '1', '79'), ('15', '4', '2', '11'), ('16', '4', '3', '67'), ('17', '4', '4', '100'), ('18', '5', '1', '79'), ('19', '5', '2', '11'), ('20', '5', '3', '67'), ('21', '5', '4', '100'), ('22', '6', '1', '9'), ('23', '6', '2', '100'), ('24', '6', '3', '67'), ('25', '6', '4', '100'), ('26', '7', '1', '9'), ('27', '7', '2', '100'), ('28', '7', '3', '67'), ('29', '7', '4', '88'), ('30', '8', '1', '9'), ('31', '8', '2', '100'), ('32', '8', '3', '67'), ('33', '8', '4', '88'), ('34', '9', '1', '91'), ('35', '9', '2', '88'), ('36', '9', '3', '67'), ('37', '9', '4', '22'), ('38', '10', '1', '90'), ('39', '10', '2', '77'), ('40', '10', '3', '43'), ('41', '10', '4', '87'), ('42', '11', '1', '90'), ('43', '11', '2', '77'), ('44', '11', '3', '43'), ('45', '11', '4', '87'), ('46', '12', '1', '90'), ('47', '12', '2', '77'), ('48', '12', '3', '43'), ('49', '12', '4', '87'), ('52', '13', '3', '87');
    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 ('1', '', '1', '理解'), ('2', '', '1', '钢蛋'), ('3', '', '1', '张三'), ('4', '', '1', '张一'), ('5', '', '1', '张二'), ('6', '', '1', '张四'), ('7', '', '2', '铁锤'), ('8', '', '2', '李三'), ('9', '', '2', '李一'), ('10', '', '2', '李二'), ('11', '', '2', '李四'), ('12', '', '3', '如花'), ('13', '', '3', '刘三'), ('14', '', '3', '刘一'), ('15', '', '3', '刘二'), ('16', '', '3', '刘四');
    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 ('1', '张磊老师'), ('2', '李平老师'), ('3', '刘海燕老师'), ('4', '朱云海老师'), ('5', '李杰老师');
    COMMIT;
    
    SET FOREIGN_KEY_CHECKS = 1;
    View Code

    题目:

    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、 查询没有同时选修物理课程和体育课程的学生姓名
        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操作数据库

    import pymysql
    
    conn = pymysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="123456",
        database="day41",
        charset="utf8"
    )
    
    cursor = conn.cursor(pymysql.cursors.DictCursor)  # 将查询结果做成字典格式
    res = cursor.execute('select * from class')  # 查询里面多少条数据
    print(res)
    print(cursor.fetchone())  # 获取一条查询结果
    print(cursor.fetchone())  # 获取一条查询结果
    # cursor.scroll(1, "absolute")  # 绝对移动,光标往后移动一位(参照物是开始位置)
    cursor.scroll(1, "relative")  # 相对移动,在当前位置往后移动一位
    print(cursor.fetchall())  # 获取所有数据

    三、校验用户名和密码

    import pymysql
    
    conn = pymysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="123456",
        database="day41",
        charset="utf8",
        # autocommit = True  # 修改数据的最终版本,就不用在下面加上  conn.commit()
    )
    
    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 ='jsonhs' where id =1"    # 改
    sql = "select * from userinfo where name=%s and password =%s"
    res = cursor.execute(sql, (username, password))  # 传个可迭代对象
    print(res)
    conn.commit()  # 确认数据无误之后,commit之后才会将数据真正修改到数据库,一般用于对数据库的修改比如(改,增,删)
    if res:
        print(cursor.fetchall())
    else:
        print("用户名密码错误")
    
    SQL注入
    """
    千万不要手动拼接关键参数查询条件 
    """
    
    #
    # import pymysql
    #
    # conn = pymysql.connect(
    #     host="127.0.0.1",
    #     port=3306,
    #     user="root",
    #     password="123456",
    #     database="day41",
    #     charset="utf8",
    #     autocommit=True
    # )
    # cursor =conn.cursor(pymysql.cursors.DictCursor)
    # username = input("username>>>>>>:")
    # password = input("password>>>>>:")
    # sql ="select * from userinfo where name=%s and password =%s"
    # res =cursor.execute(sql,(username,password))
    # print(res)
    # if res:
    #     print(cursor.fetchall())
    # else:
    #     print("用户名密码错误")
  • 相关阅读:
    unity3d 启用某层设置
    Unity同 iOS,Android数据交互
    Unity发布EXE去掉边框生成安装程序的最简单方法
    判断物体相对自己的方位
    相机Culling Mask 用法
    LitJson 用法
    Unity3d Attribute 总结
    unity3d shader 预定义着色器预处理宏
    (转)傅里叶分析 变换等
    Shaders: ShaderLab & Fixed Function shaders
  • 原文地址:https://www.cnblogs.com/wukai66/p/11395038.html
Copyright © 2011-2022 走看看