Chinaunix首页 | 论坛 | 博客
  • 博客访问: 237543
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 557
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-01 18:05
文章分类

全部博文(57)

文章存档

2017年(57)

我的朋友

分类: Python/Ruby

2017-11-23 16:56:37

删除数据

背景:

有些老师不好好上次,导致课程的及格率太低,最后名最差的5名老师将会被开除。

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.xie
  4. # @Time :2017-11-23 16:37
  5. # @file :delectdata.py

  6. import MySQLdb

  7. def connect_mysql():
  8.     db_config = {
  9.         'host': '10.89.1.10',
  10.         'port': 3306,
  11.         'user': 'demo',
  12.         'passwd': '123qaz',
  13.         'db': 'python_test',
  14.         'charset': 'utf8'
  15.     }
  16.     cnx = MySQLdb.connect(**db_config)
  17.     return cnx

  18. if __name__ == '__main__':
  19.     cnx = connect_mysql()

  20.     sql = '''delete from Teacher where TID in(
  21.     select TID from (select Course.CouID, Course.TID, Teacher.TName, count(Teacher.TID) as count_teacher from Course
  22.     left join Score on Score.Grade < 60 and Course.CouID = Score.CID
  23.     left join Teacher on Course.TID = Teacher.TID
  24.     group by Course.TID
  25.     order by count_teacher desc
  26.     limit 5) as test )
  27.     '''
  28. try:
  29.     cus = cnx.cursor()
  30.     cus.execute(sql)
  31.     result = cus.fetchall()
  32.     cus.close()
  33.     cnx.commit()
  34. except Exception as e:
  35.     cnx.rollback()
  36.     print('error')
  37.     raise e
  38. finally:
  39.     cnx.close()

结果:

程序正常执行,没有报错

解释:

1.      先查询出Course表中的Course.TIDCourse.TID

2.      left join 是关联Score表,查出Score.Grade > 59,并且,课程ID和课程表的CouID要对应上

3.      left join Teacher 是关联老师表,课程中的了老师ID和老师表中的老师ID对应上

4.      select中加上老师的名字Teacher.Tnamecount(Teacher.TID)

5.      group by Course.TID,在根据老师的的TID进行分组

6.      oder by 最后对count_teacher进行排序,取前5行,

7.      在通过套用一个select子查询,把所有的TID搂出来

8.      然后delete from Teacher 最后删除TID在上表中的子查询中。


阅读(1685) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~