一、      上节课复习

select concat_ws(":",name,age,sex,post) as info from emp;    # egon:male:18

二、      子查询(一个问题一个问题解决)

把一个查询语句用括号括起来,当做另外一条查询语句的条件去用,称为子查询

select name from emp where dep_id = (select id from dep where name="技术");  #子查询

select emp.name from emp inner join dep on emp.dep_id = dep.id where dep.name="技术";  #链表

#查询平均年龄在25岁以上的部门名

select name from dep where id in (select dep_id from emp group by dep_id having avg(age) > 25);   #子查询

select dep.name from emp inner join dep on emp.dep_id = dep.id group by dep.name having avg(age) > 25;  #链表

#查看不足2人的部门名(子查询得到的是有人的部门id)

select * from emp where exists (select id from dep where id > 3); #exists用法,当()返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询(empty set)

#查询每个部门最新入职的那位员工

select t1.id,t1.name,t1.post,t1.hire_date,t2.post,t2.max_date from emp as t1 inner join (select post,max(hire_date) as max_date from emp group by post) as t2 on t1.post = t2.post where t1.hire_date = t2.max_date;

三、      IDE工具(navicat)介绍

1、         ER图表(Entity-Relationship)

2、         模型;导出sql

3、         查询; 格式美化sql

四、      pymysql模块(安装与查询)

1、安装pymysql(python专用的mysql客户端套接字)

pip3 install pymysql

2、mysql 查询

import pymysql

conn=pymysql.connect(

host='127.0.0.1',

port=3306,

user='root',

password='jxtz0927',

database='db40',

charset='utf8'    #防止乱码

)

cursor=conn.cursor(pymysql.cursors.DictCursor) #将产生的结果以字典的形式显示 [{'Tables_in_db40': 'department'}, {'Tables_in_db40': 'employee'}]

# cursor=conn.cursor()  # (('department',), ('employee',))

# rows=cursor.execute('show tables;')  #rows 为受影响的行数

rows=cursor.execute('select * from class;')

print(rows)   #2

print(cursor.fetchone())    #一条

print(cursor.fetchmany(2))  #几条

print(cursor.fetchall())    #全部

cursor.scroll(3,'absolute')  #mode='absolute',绝对模式,从最开始位置向后移三条

cursor.scroll(1,'relative')  #mode='relative',相对模式,从当前位置向后移一条

cursor.close()

conn.close()

五、      pymysql模块(防止sql注入问题)

1、错误做法, 自行对字符串进行拼接,引发sql注入问题 (name= egon' --asdfg; name=xxxx'or 1=1--asdfg)

import pymysql

conn=pymysql.connect(

host='127.0.0.1',

port=3306,

user='root',

password='123',

database='db42',

charset='utf8'

)

cursor=conn.cursor(pymysql.cursors.DictCursor)

inp_user=input('用户名>>:').strip() #inp_user=""

inp_pwd=input('密码>>:').strip() #inp_pwd=""

sql="select * from user where username='%s' and password='%s'" %(inp_user,inp_pwd) #自行拼接,引发sql注入问题

print(sql)

rows=cursor.execute(sql)

if rows:

print('登录成功')

else:

print('登录失败')

cursor.close()

conn.close()

2、在服务端防止sql注入问题:不要自己拼接字符串,让pymysql模块去拼接

import pymysql

conn=pymysql.connect(

host='127.0.0.1',

port=3306,

user='root',

password='123',

database='db42',

charset='utf8'

)

cursor=conn.cursor(pymysql.cursors.DictCursor)

inp_user=input('用户名>>:').strip() #inp_user=""

inp_pwd=input('密码>>:').strip() #inp_pwd=""

sql="select * from user where username=%s and password=%s"

print(sql)

rows=cursor.execute(sql,(inp_user,inp_pwd))

if rows:

print('登录成功')

else:

print('登录失败')

cursor.close()

conn.close()

六、      pymysql模块(增删改)

import pymysql

conn=pymysql.connect(

host='127.0.0.1',

port=3306,

user='root',

password='123',

database='db42',

charset='utf8'

)

cursor=conn.cursor(pymysql.cursors.DictCursor)

sql='update user set username="alexSB" where id=2'

rows=cursor.execute(sql) #改数据

print(rows)

print(cursor.lastrowid)

sql='insert into user(username,password) values(%s,%s)'

rows=cursor.executemany(sql,[('lwz','123'),('evia','455'),('lsd','333')])  #一次插入多行记录

print(rows)

print(cursor.lastrowid)  #显示插到哪行了(id)

conn.commit()   # 只有commit提交才会完成真正的修改

cursor.close()

conn.close()

转载于:https://www.cnblogs.com/yangli0504/p/9038490.html

Python之旅.第十章.mysql.相关推荐

  1. Python之旅.第十章.mysql

    一.创建表的完整语法 #[]内的可有可无,即创建表时字段名和类型是必须填写的,宽度与约束条件是可选择填写的. create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[ ...

  2. python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...

  3. postgresql 远程用户_构建Python pandas基于SSH远程MySQL和PostgreSQL的数据分析

    背景知识视频教程 Python中使用Pandas教程 - 国外课栈​viadean.com Pandas数据分析与探索 - 国外课栈​viadean.com 如果您无法从外部环境直接访问数据库,则可能 ...

  4. 在Windows平台下实现《简明 Python 教程》第十章案例(利用winrar实现压缩备份)...

    在<简明Python教程>第十章,作者以一个小的脚本开发作为案例讲解Python(http://woodpecker.org.cn/abyteofpython_cn/chinese/ch1 ...

  5. 开启python之旅

    1.python安装 Anaconda安装地址:https://www.anaconda.com/ 2.Pycharm安装 Pycharm安装地址:https://www.jetbrains.com/ ...

  6. python导入excel数据到mysql

    python导入excel数据到mysql 使用多线程,目前大概一分钟写入1w条 环境介绍 windows10-x64 python3.6.5-x64 Excel2016 MySql5.7.18 需要 ...

  7. 数据库 用Python把数据写入到MySQL数据库/如何使用Python将数据写入到阿里云的RDS-MYSQL

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/weixin_42555401 需要解决的问题: 1.用Python把数据写入到MySQL数据库? 2 ...

  8. Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)

    Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤) 目录

  9. 开启我的Python之旅

    开启我的Python之旅 有人说,"聪明的人喜欢阅读,智慧的人喜欢写作".而我,既不是那种才高八斗,疯狂阅读的人,也不是那种激扬文字,热衷于写作的人.我就是我--一个平凡的我,一个 ...

最新文章

  1. RSA加密传输代码示例
  2. 机器学习--Gradient Boosting Machine(GBM)调参方法详解 转 面试问到的
  3. Tomcat默认访问页面
  4. 第8集析构函数中抛出的异常
  5. SQL 流程控制语句 之四 WAITFOR语句介绍
  6. 关于《红泰昌 TC-2015B》严重漏电说明!
  7. php添加用户信息进入数据库,dedecms用户将信息插入数据库
  8. [转]netstat 输出内容详解,TCP链接握手对应state
  9. OpenStack实验:创建虚拟机的问题
  10. devcon命令开启启用/禁用端口
  11. CuteFTP,8uftp cuteftp
  12. 简单的U盘病毒清理工具 v0.5
  13. wincc7.5系统语言切换功能(C脚本)
  14. java wav 转 mp3_使用jave2将音频wav转换成mp3格式
  15. 生成的exe程序默认以管理员权限启动
  16. 如何维持手机电池寿命_手机电池寿命怎么延长
  17. python-scikit-learn基础
  18. 汉语拼音声母、韵母表
  19. Python小白逆袭大神-结营心得-alading
  20. Eclipse中Java项目转化为Java Web项目

热门文章

  1. gis与计算机科学之间的联系,GIS与地图学及电子地图
  2. ops电脑属于微型计算机吗,泽创触摸一体机OPS电脑是什么?
  3. 【SSM】13-Spring中实现依赖注入的两种方式(xml和注解)
  4. 程序员去美国工作:2015年H1B抽签结果与分析
  5. img标签加载src图片,图片逆时针旋转了90度,解决方案
  6. resize用法matlab,opencv的resize和matlab的imresize函数的计算
  7. java毕业论文云笔记_开题报告基于Java云笔记管理系统.doc
  8. 直流无刷电机的调试与代码开源(配套资源)
  9. 羊抗HBsAg偶联CdSe/ZnSe/ZnS量子点|抗乙肝表面抗原抗体偶联CdSe/ZnSe/ZnS量子点|羧基量子点偶联anti-HBsAg多克隆抗体
  10. 房贷新政冷冻楼市 炒楼热钱流向股市