Day18 PythonWeb全栈课程课堂内容

news/2024/11/25 20:57:48/

[toc]

/* 准备数据 */-- 创建一个数据库
create database `day18`;-- 创建一个商品goods数据表
CREATE TABLE `goods`(`id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,`NAME` VARCHAR(150) NOT NULL,`cate_name` VARCHAR(40) NOT NULL,`brand_name` VARCHAR(40) NOT NULL,`price` DECIMAL(10,3) NOT NULL DEFAULT 0,`is_show` TINYINT NOT NULL DEFAULT 1,`is_saleoff` TINYINT NOT NULL DEFAULT 0
)ENGINE=INNODB DEFAULT CHARSET=utf-8;
/* goods表中插入数据 */
INSERT INTO goods VALUES(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'x240 超极本','超级本','联想','4880',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'u330p 13.3英寸超极本','超级本','联想','4299',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'svp13226scb 触控超极本','超级本','索尼','7999',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',DEFAULT,DEFAULT); 
INSERT INTO goods VALUES(0,'商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT);

1. MySQL与Python交互

1.1 分表

  • 分表是因为当一张表的数据量比较多时,但是我们只需要查询其中的某个字段数据,就会导致查询效率降低,所以此处我们需要使用到分表。

  • 商品分类表

  • 创建商品分类表goods_cates

create table `goods_cates`(`id` int unsigned primary key auto_increment not null,`name` varchar(40) not null
);
  • 将商品表goods中的商品种类goods_cates查询并插入到 商品分类表里。
insert into `goods_cates` (name) select `cate_name` from `goods` group by `cate_name`;
  • 将商品表goods中的商品种类goods_cates 更改为 商品表分类表goods_cates 对应的 id。
update `goods` as g inner join `goods_cates` as c on g.`cate_name`=c.`name` set g.`cate_name`=c.`id`;

1.2 安装pymysql

  • 在windows操作系统上
  1. Python3: pip install pymysql

  2. Python2: pip install MySQLdb

1.3 Python操作系统MySQL步骤

序号步骤备注
1开始
2创建:connection
3获取:cursor
4执行查询 、执行命令、获取数据、处理数据
5关闭:cursor
6关闭:connection
7结束

1.4 几本案例

# 1.导入库
import pymysql# 2.连接数据库
conn = pymysql.connect(host="127.0.0.1", # IP地址port=3306, # 端口号,注意没有引号user='root', # 用户名passwd='111111', # 用户密码db='day18' # 需要连接的数据库名称
)# 3.获取游标对象
cs = conn.cursor()# 4.通过游标对象直行sql语句
sql = "select * from goods;"
# cs.execute(sql)
r = cs.execute(sql) 返回的是行数# 5.得到数据
# 5.1 查询一条
print(cs.fetchone()) # 第一条
print(cs.fetchone()) # 第二条# 5.2 获取多条数据
print(cs.fetchmany()) 
# cs.fetchmany(size) 返回行数数量为 size+1 行,默认为1。# 5.3 获取全部
print(cs.fetchall())'''
获取完毕之后,再往下获取,则返回值为None
print(cs.fetchone())
'''

1.5 练习

1.5.1 练习1

'''
封装DB类
'''from pymysql import *class MyDb(object):# 实现对象再初始化连接数据库def __init__(self):self.my_conn()def my_conn(self):try:self.conn = connect(host="127.0.0.1", # IP地址port=3306, # 端口号,注意没有引号user='root', # 用户名passwd='111111', # 用户密码db='day18' # 需要连接的数据库名称)except Exception as e:print(e)def get_one(self):sql = 'select * from goods;'cs = self.conn.cursor()cs.execute(sql)res = cs.fetchone()cs.close()self.conn.close()return resdef main():obj = MyDb()res = obj.get_one()print(res)if __name__ == '__main__':main()
# ...	def main():obj = MyDb()res = obj.get_one()res = obj.get_one() # 获取第二条报错,原因在get_one方法中已经关闭游标和连接print(res)if __name__ == '__main__':main()
# ...	def get_one(self):sql = 'select * from goods;'cs = self.conn.cursor()cs.execute(sql)res = cs.fetchone()cs.close()return resdef close_conn(self):self.conn.close()def main():obj = MyDb()print(obj.get_one())print(obj.get_one())if __name__ == '__main__':main()
# ...	def get_one(self):sql = 'select * from goods;'cs = self.conn.cursor()cs.execute(sql)res = cs.fetchone()cs.close()return resdef __del__(self): # 自动关闭数据库连接self.conn.close()def main():obj = MyDb()print(obj.get_one())print(obj.get_one())if __name__ == '__main__':main()

1.5.2 练习2

'''
练习2:
使用面向对象完成商品查询
• 输入1:查询所有商品
• 输入2:所有商品种类
• 输入3:查询所有品牌
• 输入4:退出
• 输入5:插入数据
'''
import pymysqlclass MyDb(object):def __init__(self):# 1.连接数据库self.conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='111111',db='day18')# 2.获取游标self.cs = self.conn.cursor()# 3.定义run方法来进行输入值def run(self):while True:# print('mb shop')# print('1:查询所有商品')# print('2:所有商品种类')# print('3:查询所有品牌')# print('4:退出')# num = int(input('请输入功能对应的序号:'))num = self.print_menu()if num == 1:self.show_all_goods()elif num == 2:self.show_all_cate()elif num == 3:self.show_all_brand()elif num == 4:breakelif num == 5:self.add_cate()else:print('输入有误,请重新输入。')@staticmethoddef print_menu():print('mb shop')print('1:查询所有商品')print('2:所有商品种类')print('3:查询所有品牌')print('4:退出')print('5:添加商品数据')num = int(input('请输入功能对应的序号:'))return numdef show_all_goods(self):sql = 'select * from goods;'# self.cs.execute(sql)# res = self.cs.fetchall()# for item in res:#     print(item)self.execute_sql(sql)def show_all_cate(self):sql = 'select * from goods_cates;'# self.cs.execute(sql)# res = self.cs.fetchall()# for item in res:#     print(item)self.execute_sql(sql)def execute_sql(self, sql):self.cs.execute(sql)res = self.cs.fetchall()for item in res:print(item)def show_all_brand(self):sql = 'select distinct brand_name from goods;'self.execute_sql(sql)def add_cate(self):name = input('请输入新商品的名字:')# sql = "insert into goods_cates (name) values ('%s');"%namesql = "insert into goods_cates (name) values (%s);"self.cs.execute(sql, (name,))self.conn.commit()def __del__(self):self.cs.close()self.conn.close()def main():obj = MyDb()obj.run()if __name__ == '__main__':main()

1.5.3 练习3

import pymysqldef coperation_db():'''此时运行带,会发现数据没有插入表中,因为:修改数据需要提交事务注意:当没有提交事务的时候,执行了插入语句,这个数据实际上内存中,没有提交。所以id是自增的注意:修改数据需要提交事务:return:'''# 1.连接数据库conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='111111',db='day18')# 2.创建游标cs = conn.cursor()# 3.定义sql语句sql = "insert into students (name) values ('James');"# 4.执行sql语句cs.execute(sql)# 5.通过连接对象调用 commit() 方法进行事务的提交conn.commit()# 6.关闭cs.close()conn.close()if __name__ == '__main__':coperation_db()

1.5.4 练习4

import pymysqldef coperation_db():'''通过一个commit可以插入多条数据吗?-->可以:return:'''# 1.连接数据库conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='111111',db='day18')# 2.创建游标cs = conn.cursor()# 3.定义sql语句sql = "insert into students (name) values ('Soft');"# 4.执行sql语句cs.execute(sql)# 3.定义sql语句sql = "insert into students (name) values ('Lucy');"# 4.执行sql语句cs.execute(sql)# 5.通过连接对象调用 commit() 方法进行事务的提交conn.commit()# 6.关闭cs.close()conn.close()if __name__ == '__main__':coperation_db()

1.5.5 练习5

import pymysqldef coperation_db():'''需求:如果上面一条插入语句报错,数据还会被插入进去吗? -- 不会解决: 异常捕获,数据没有插入到表中:return:'''# 1.连接数据库conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='111111',db='day18')# 2.创建游标cs = conn.cursor()# 3.定义sql语句sql = "insert into students (name) values ('Coco');"# 4.执行sql语句cs.execute(sql)# 3.定义sql语句sql = "insert into students (name) values ('Lily');"# 4.执行sql语句cs.execute(sql)# 5.通过连接对象调用 commit() 方法进行事务的提交conn.commit()# 6.关闭cs.close()conn.close()if __name__ == '__main__':coperation_db()

1.5.6 练习6

import pymysqldef coperation_db():'''如果有一个报错(不管先后),都不用插入数据了。回滚。conn.rollback()回滚的时候,虽然数据不会插入表中,但是实际上已经在内存中:return:'''try:conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='111111',db='day18')cs = conn.cursor()sql = "insert into students (name) values ('Marry');"cs.execute(sql)sql = "insert into students (name2) values ('Jojo');"cs.execute(sql)conn.commit()cs.close()conn.close()except Exception as e:print(e)# 回滚,到内存中了conn.rollback()if __name__ == '__main__':coperation_db()'''
- 全部插入成功: 一个提交事务
- 执行失败:- 失败全部: rollback()  id+1- 提交一部分:commit()    id+1- 前提: 第一条没问题的提交
'''

http://www.ppmy.cn/news/180612.html

相关文章

MySQL 数据库(Python 连接数据库)

Mysql 引擎外键表之间的关联Python 连接数据库Python 中类的实现 引擎 查看引擎 show engines 可以了解到默认引擎为 MyISAM,此引擎不支持外键 修改默认引擎 此处以 phpstudy 修改配置文件 my 为例 文件位置:phpStudy\PHPTutorial\MySQL 第一步&#…

英特尔微型计算机第一启动项,英特尔九代酷睿:强悍的笔记本电脑平台

4月23日,英特尔推出了迄今英特尔最强大的酷睿移动处理器:全新第九代智能英特尔酷睿移动处理器(H系列)。第九代智能英特尔酷睿移动处理器(H系列)专为游戏玩家和创作者而设计,将用户体验提升至新的高度。 英特尔高端和游戏笔记本电脑细分市场总…

数据库课堂笔记5(MySQL与Python交互)

MySQL与Python交互 准备数据 准备数据 要求:创建一个商品 goods 数据表 -- 创建数据库 CREATE DATABASE mb CHARSETuft8; -- 创建数据表 CREATE TABLE goods(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,NAME VARCHAR(150) NOT NULL,cate_name VARCHAR(…

little white 的电脑DIY历程(小小白自摸教程)

希望更多的人尝试自己diy电脑,因为这真的很有趣! 本文章讲解了升级一个笔记本电脑和组装一个台式机的历程,过程摸索艰难,所有操作都是第一次且一直查资料,欢迎按照我的思路自己尝试一下! 文章目录 前言一、…

MySQL 07 - SQL语句四

SQL语句四 1.自关联 可以简单的理解为自己与自己进行连接查询。 比如: 一张areas 表里面有省市区,我们需要在通过这一张表查询某省对应的所有市。 select * from areas as p inner join areas as c on p.id c.pid having p.name 湖南;2. 外键 2.1外键介绍 M…

3MySQL数据库-连接python-实现DB类 - 全栈式开发30

MySQL与Python交互 一、关系图二、python实现操作数据库(一)connect链接数据库conn.close()conn.cursor()conn.commit()conn.rollback() 实现回滚 (二)cursor()获取光标cs.close()cs.execute()cs.fetchone()cs.fetchmany()cs.fetc…

鲁大师Q1季度电脑硬件报告:intel 12代酷睿笔记本霸榜,显卡小幅降价

鲁大师2022年Q1季报消费级电脑硬件排行数据包含2022.01.01—2022.03.31日鲁大师PC正式版测试数据。为减少小众产品(服务器)冲击榜单,使得榜单更具参考价值,数据采样选取测试个数超过1000以上,发布日期3年以内的产品&am…

MySQL学习| python与MySQL交互

上一篇博客主要讲了SQL的环境和语法,这一篇主要学习的是python和MySQL如何交互。 先搬上数据,作为准备 -- 创建 某宝 数据库 CREATE DATABASE mb CHARSETutf8;USE mb;CREATE TABLE goods(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,NAME VAR…