复习:
1. MySQL:文件管理的软件
2. 三部分:
- 服务端
- SQL语句
- 客户端
3. 客户端:
- MySQL
- navicat
4. 授权操作:
- 用户操作
- 授权操作
5. SQL语句
- 数据库操作
- 创建数据库要指定字符编码:
create database xx default charset=utf8;
- 删除数据库:
drop database xx; - 数据表操作
- 列
- 数字
整数
小数
- 字符串
- 时间
datatime
- 二进制
- 其他:引擎、字符编码、起始值 - 主键索引
- 唯一索引
- 外键
- 一对多
- 一对一
- 多对多 PS:数据放在硬盘上 - 数据行操作
- 增
- 删
- 改
- 查
- in not in
- between and
- limit
- group by having
- order by
-desc
-asc
- like '%a'
- left join xx on 关系
- inner join
- 临时表
select * from(select * from tb1 where id<10) as B; PS:笛卡尔积
a:三条数据 1 2 3
select * from a as a1,a as a2;
1 1、1 2、1 3、2 1、2 2、2 3、3 1、3 2、3 3

一. 练习题讲解

    1. 去重:distinct    -- 效率不高
SELECT distinct student.sid,student.sname from score LEFT JOIN student ON score.student_id=student.sid where score.num<60;

二. pymysql模块:
pip3 install pymysql -i https://pypi.douban.com/simple
python模块:对数据库进行操作(SQL语句)

import pymysql

'''
user = input('username:')
pwd = input('possword:') conn = pymysql.connect(host='localhost', user='root', password='lpg123456', database='db1') # 打开数据库
cursor = conn.cursor() # 游标
# 连接数据库成功
sql = "select * from userinfo where username = %(u)s and password = %(p)s "
cursor.execute(sql, {'u': user, 'p': pwd})
result = cursor.fetchone() cursor.close()
conn.close() if result:
print('登录成功')
else:
print('登录失败') ''' # 增 删 改 '''
conn = pymysql.connect(host='localhost',user='root',password='lpg123456',database='db1')
cursor = conn.cursor()
sql = "insert into userinfo(username, password) values('egon','123456')"
cursor.execute(sql) conn.commit() # 提交 增 删 改 需要用commit cursor.close()
conn.close()
''' ''' user = 'wusir'
pwd = '123456'
conn = pymysql.connect(host='localhost',user='root',password='lpg123456',database='db1')
cursor = conn.cursor()
# sql = "insert into userinfo(username, password) values(%s,%s)"
# cursor.execute(sql,[user,pwd]) # 增加多个
sql = "insert into userinfo(username, password) values(%s,%s)"
# r:受影响的行数
r = cursor.executemany(sql,[('laoyao','sb'),('taibai','SB')]) # 只适用于insert conn.commit() # 提交 增 删 改 需要用commit cursor.close()
conn.close() ''' # 查 ''' conn = pymysql.connect(host='localhost',user='root',password='lpg123456',database='db1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 默认cursor为None,改成以字典形式打印 sql = "select * from userinfo limit 10"
# r:受影响的行数
cursor.execute(sql) # result = cursor.fetchone() # 一次取一个
# print(result)
#
# result = cursor.fetchone()
# print(result)
#
# result = cursor.fetchone()
# print(result) # result = cursor.fetchmany(4) # 一次取多个
# print(result) result = cursor.fetchall() # 一次取所有
print(result)
# [{'id': 1, 'username': 'alex', 'password': '123456'}, {'id': 2, 'username': 'egon', 'password': '123456'}, {'id': 5, 'username': 'wusir', 'password': '123456'}, {'id': 6, 'username': 'laoyao', 'password': 'sb'}, {'id': 7, 'username': 'taibai', 'password': 'SB'}] cursor.close()
conn.close() ''' # 新插入数据的自增ID :cursor.lastrowid conn = pymysql.connect(host='localhost',user='root',password='lpg123456',database='db1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = "insert into userinfo(username,password) values('asdsafd','467467')"
cursor.execute(sql)
conn.commit()
print(cursor.lastrowid) cursor.close()
conn.close()
        - 连接、关闭(游标)
- execute() --> SQL注入问题
- 增删改 : conn.commit()
- fetchone()
- fetchmany()
- fetchall()
- 获取插入数据的自增ID:lastrowid

python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4的更多相关文章

  1. python学习之老男孩python全栈第九期_第一次周末考试题(over)第三次添加完毕

    day 6python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1. 简述变量命名规范(3分) 答:(1) 变量为数字,字母以及下划线的任意组合 ...

  2. python学习之老男孩python全栈第九期_数据库day005知识点总结 —— MySQL数据库day5

    三. MySQL视图(不常用) 给某个查询语句设置个别名(视图名),日后方便使用 - 创建: create view 视图名 as SQL; PS:视图是虚拟的 - 修改: alter view 视图 ...

  3. python学习之老男孩python全栈第九期_数据库day002知识点总结 —— MySQL数据库day2(全部)

    一. 复习1. MySQL: - 服务端 - 客户端2. 通信交流 - 授权 - SQL语句 - 数据库 创建数据库: create database db1 default charset utf8 ...

  4. python学习之老男孩python全栈第九期_第二周学习总结

    迭代器 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的 1. 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir(数据) ) 可迭代的 ...

  5. python学习之老男孩python全栈第九期_数据库day002 -- 作业 (数据库为day001创建的数据库)

    1.自行创建测试数据 对score表进行优化: 添加数据: 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 为了方便做题,额外增加几条数据 查询: 3.查询平均成绩大于60分的同学的学号和 ...

  6. python学习之老男孩python全栈第九期_数据库day001知识点总结 —— MySQL操作数据库以及数据表、基本数据类型、基本增删改查、外键定义以及创建

    一. 学习SQL语句规则以及外键 1. 操作文件夹 create database db2; 创建文件夹 create database db2 default charset utf8; 创建文件夹 ...

  7. python学习之老男孩python全栈第九期_数据库day004 -- 作业

    https://www.cnblogs.com/YD2018/p/9451809.html 11. 查询学过“001”并且也学过编号“002”课程的同学的学号.姓名 select student.si ...

  8. python学习之老男孩python全栈第九期_数据库day003知识点总结 —— MySQL数据库day3

    复习: 1. 增 insert into xx(name) values('root'),('xxx'); insert into xx(name) select id from tb1; 2. 自增 ...

  9. python学习之老男孩python全栈第九期_数据库day003 -- 作业

    数据库: class:  course: student: teacher: score: /* Navicat Premium Data Transfer Source Server : local ...

随机推荐

  1. Flask从入门到精通之在视图函数中处理表单

    在新版hello.py 中,视图函数index() 不仅要渲染表单,还要接收表单中的数据.更新后的index() 视图函数如下: @app.route('/') def index(): name = ...

  2. Cassandra的数据模型

    Cassandra的数据模型可以理解为嵌套的Map,在Cassandra中数据类型主要有四种:Column,SuperColumn,ColumnFamily,Keyspace.下面分别介绍这几种类型. ...

  3. PHP之旅9 MySQL数据库

    PHP最主要的还是进行数据处理的,所以与数据库的交互是非常重要的. 现在主流的数据库有:Oracle.DB2.Microsoft SQL Server.MySQL等. MySQL由于其体积小.速度快. ...

  4. Mybatis常用知识点总结

    1. #{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc ...

  5. Python绑定方法与非绑定方法

    绑定方法 绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 绑定到类的方法:用classmethod装饰器装饰的方法,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调 ...

  6. .gitignore中添加的某个忽略文件并不生效

    最近项目中,来了一新同事,协同开发的过程中,发现老是提示pod install,于是照做了,做完项目可以跑成功但发现提示我跟同事一样的问题,Podfile.lock文件需要提交,于是便提交了,然而同事 ...

  7. 【xsy1162】鬼计之夜 最短路+二进制拆分

    套路题(然而我没看题解做不出来) 题目大意:给你一个$n$个点,$m$条有向边的图.图中有$k$个标记点,求距离最近的标记点间距离. 数据范围:$n,m,k≤10^5$. 设$p_i表$示第$i$个标 ...

  8. 快速排序的理解和实现(Java)

    快速排序介绍 快速排序(Quick Sort)使用分治法策略,其基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另外一部分记录的关键字小,则可分别对这两部分记录继续进 ...

  9. Python基础3:字符编码

    http://www.jb51.net/article/64917.htm Python 编码为什么那么蛋疼? https://i.cnblogs.com/EditPosts.aspx?postid= ...

  10. Netty核心概念(9)之Future

    1.前言 第7节讲解JAVA的线程模型中就说到了Future,并解释了为什么可以主线程可以获得线程池任务的执行后结果,变成一种同步状态.秘密就在于Java将所有的runnable和callable任务 ...