1、python关联MySQL

pymysql:

  安装:pip3 install pymysql

  

1.0:连接到数据库中

import pymysql

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='',
database='user',
autocommit=True,
charset='utf8' # 编码的时候千万不要加上- 如果写成了utf-8-->就会直接报错
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
# 产生一个游标对象 以字典的形式返回查询出来的数据
# 键是表的字段
# 值是表的字段对应的值
sql = "select * from teacher" cursor.execute(sql) # 执行传入的sql语句 print(cursor.fetchone()) # 只获取一条数据
cursor.scroll(2, 'absolute') # 控制光标移动 absolute相对于起始的位置往后移动几位
cursor.scroll(1, 'relative') # relative相对于当前位置 往后移动几位
print(cursor.fetchall()) # 获取所有的数据 返回的结果只是一个列表

2.0: sql注入的问题

import pymysql

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='',
database='user',
autocommit=True, # 这个参数配置后,增删改查都不许呀在手动进行添加conn.commit了
charset='utf8' # 编码的时候千万不要加上- 如果写成了utf-8-->就会直接报错
)
cursor = conn.cursor(pymysql.cursors.DictCursor) user_name = input('user_name:>>').strip()
password = input('password:>>').strip()
sql = "select * from teacher where name=%s and password=%s" res = cursor.execute(sql, (user_name, password)) # 能够帮你自动过滤特殊符号 避免sql注入的问题
# execute能够自动识别sql语句中的%s 然后帮你完成替换
if res:
print(cursor.fetchall())
else:
print("user-name or password error!!!") """
sql注入就是利用注释等具有特殊意义的符号 来完成一些骚操作 后续写的sql语句 不要手动拼接关键性的数据,而是可以选择让execute去完成
"""

增删改查:

# 增
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.excute(sql,('jason','')) # 修改
sql = "update user set username='jasonDSB' where id=1"
rows = cursor.excute(sql) """
增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改
""" # 一次插入多行记录
res = cursor,excutemany(sql,[(),(),()]

练习题:  

  查询所有的课程的名称以及对应的任课老师姓名

SELECT
course.cname,
teacher.tname
FROM
course
INNER JOIN teacher ON course.teacher_id = teacher.tid;

  查询平均成绩大于八十分的同学的姓名和平均成绩

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;

  查询没有报李平老师课的学生姓名

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 = '李平老师'
)
);

  查询没有同时选修物理课程和体育课程的学生姓名

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
);

  查询挂科超过两门(包括两门)的学生姓名和班级

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)
;

MySQL--python关联MySQL、练习题的更多相关文章

  1. python操作三大主流数据库(3)python操作mysql③python操作mysql的orm工具sqlaichemy安装配置和使用

    python操作mysql③python操作mysql的orm工具sqlaichemy安装配置和使用 手册地址: http://docs.sqlalchemy.org/en/rel_1_1/orm/i ...

  2. python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查

    python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...

  3. Python操作Mysql之基本操作

    pymysql python操作mysql依赖pymysql这个模块 下载安装 pip3 install pymysql 操作mysql python操作mysql的时候,是通过”游标”来进行操作的. ...

  4. python操作mysql数据库的常用方法使用详解

    python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...

  5. python django mysql配置

    1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite的数据库,默认自带sqlite ...

  6. Python自动化 【第十二篇】:Python进阶-MySQL和ORM

    本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...

  7. 如何使用python将MySQL中的查询结果导出为Excel----xlwt的使用

    如何在MySQL中执行的一条查询语句结果导出为Excel? 一.可选方法 1.使用sql yog等远程登录,执行查询语句并导出结果集为Excel 适用于较简单的查询结果集的导出 如果需要多个SQL语句 ...

  8. Python使用Mysql官方驱动(取出dict类型的数据)

    简介 虽然Python有很多连接mysql的库,比如mysqldb, pymysql~这些都很方便,现在就教大家使用mysql的官方库来操作mysql. 安装 windows: 下载链接 选择自己的w ...

  9. 饮冰三年-人工智能-Python-21 Python数据库MySql

    一:下载与安装 1:下载地址:https://dev.mysql.com/downloads/mysql/ 2:安装MySql 打开下载文件解压到指定文件目录.(我这里解压目录为D:\MySql\my ...

随机推荐

  1. C++内存字节对齐规则

    为什么要进行内存对齐以及对齐规则 C/C++—— 内存字节对齐规则 C++内存字节对齐规则

  2. centOS7.2防火墙常用配置(转)

    centOS7.2防火墙常用配置   firewall-cmd --state #查看默认防火墙状态(关闭后显示not running,开启后显示running) systemctl stop fir ...

  3. CobaltStrike进阶篇-批量上线

    前言 当获取一台目标服务器权限时,更多是想办法扩大战果,获取目标凭据并横向进行登陆是最快速的拿权方式.但目标所处环境是否可出网,如何利用CobalStrike进行批量上线,正是本文所要讲述的内容. 获 ...

  4. 表单单选按钮input[type="radio"]

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  5. Python学习day45-数据库(总结)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  6. Activiti流程图部署及流程图部分操作

    流程图部署有两种方式,一种是通过classpath,另一种是通过zip文件 通过classpath方式如下 public void deploymentProcessDefinition_classp ...

  7. hexo_localhost:4000_无法访问

    title: 'hexo_localhost:4000_无法访问' date: 2016-05-02 09:38:51 categories: blog tags: [hexo] 问题描述 安装完成h ...

  8. springMVC和springBoot区别

    Spring MVC是什么?(1)Spring MVC是Spring提供的一个强大而灵活的模块式web框架.通过Dispatcher Servlet, ModelAndView 和 View Reso ...

  9. mysql工具使用

    mysql -u user_name -p123456 -h host_name -P 3306 -D database_name -e "show full processlist;&qu ...

  10. Odoo 新 API 概述

    __all__ = [ 'Environment', 'Meta', 'guess', 'noguess', 'model', 'multi', 'one', 'cr', 'cr_context', ...