学习大数据DAY31 Python基础语法4和基于Python中的MySQL 编程

目录

Python 库 模块

time&datetime 库

连接 MySQL 操作

结构操作

数据增删改操作

数据查询操作

上机练习 7

面向对象 OOP

封装

继承

三层架构---面向对象思想模型层

数据层

业务逻辑显示层

上机练习 8 三层架构开发豆瓣网

关于我对 AI 写代码的看法:


Python 库 模块

1. 基本功能
2. 标准库
3. 扩展库
4. 自定义库
python import 或者 from ... import 来导入相应的库。

time&datetime

Python 中处理时间的标准库
提供获取系统时间并格式化输出功能
提供系统级精确计时功能,用于程序性能分析
time 库包含三类函数
时间获取: localtime()
时间格式化: strftime()
strptime()
程序计时: sleep()
perf_counter()
import time
# 日期类型与字符串直接互相转化
t1= time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",t1))
timeStr = '2018-01-26 12:55:20'
t2=time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
# 测试程序执行时间差
t_start = time.perf_counter()
print(" 测试 ")
# 开始休眠
time.sleep(5)
print(" 休眠完毕 ")
t_end = time.perf_counter()
print( t_end-t_start )
import datetime
t = datetime.datetime.now()
print(datetime.datetime.strftime(t,"%Y-%m-%d %H:%M:%S"))
print(datetime.datetime.strptime("20230211","%Y%m%d"))

连接 MySQL 操作

pymysql 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库
vscode 终端下面直接运行 pip3 install pymysql 安装即可
import pymysql
# 连接 database
conn = pymysql.connect(
host="127.0.0.1",
user="root",password="root123456",
database="test",
charset="utf8")
print(" 打开数据库 ")
# 关闭数据库
conn.close()
print(" 关闭数据库 ")

结构操作

import pymysql
# 连接 database
conn = pymysql.connect(
host="127.0.0.1",
user="root",password="root123456",
database="test",
charset="utf8")
# 得到一个可以执行 SQL 语句的光标对象
baoma = conn.cursor()
print(" 打开数据库 ")
# 使用预处理语句创建表
sql1 = """create table if not exists MovieType(
tid int primary key,
tname varchar(20),
tcontent varchar(500),
tdate datetime
)"""
baoma.execute(sql1)
print(" 操作成功 ")
baoma.close()
conn.close()
print(" 关闭数据库 ")

数据增删改操作

import pymysql
# 连接 database
conn = pymysql.connect(
host="127.0.0.1",
user="root",password="root123456",
database="test",
charset="utf8")
# 得到一个可以执行 SQL 语句的光标对象
baoma = conn.cursor()
print(" 打开数据库 ")
c="insert into MovieType values(1,' 喜 剧 ',' 这 是 一 种 搞 笑 的 视 频
',now())"
result=baoma.execute(c)
conn.commit() # 需要提交才到数据库,有错则 rollback
print(" 插入成功 ")
print(result) # 可以使用 return 返回结果
baoma.close()
conn.close()
print(" 关闭数据库 ")

数据查询操作

baoma.fetchone(): 执行完毕返回的结果集默认以元组显示
baoma.fetchall(): 元组的元组
import pymysql
sql = "select * from MovieType order by tdate desc"
baoma.execute(sql)
# data = baoma.fetchone()# 读一行
# print(data)
data = baoma.fetchall()# 读所有
print(data)
for i in data:
print(i[0],i[1])

上机练习 7

注意:增删改查请分开执行。
# 1.灵活使用 pymyql 来完成创建表、添加数据、查询数据
# create table if not exists MovieType(# tid int primary key,
# tname varchar(20),
# tcontent varchar(200),
# tdate datetime
# )
# insert into MovieType values(1,'喜剧','这是一个搞笑的电影',now())
# insert into MovieType values(2,'动作','这这是一个打斗的电影
',now())
# select * from MovieType
# 2.查询数据时日期处理成如下格式:
# 1 喜剧 这是一个搞笑的电影 2023 年 08 月 21 日
# 2 动作 这是一个打斗的电影 2023 年 08 月 21 日
import pymysql
import datetime
# 连接 database
conn = pymysql.connect(
host="127.0.0.1",
user="root",password="root123456",
database="test",
charset="utf8")
print("打开数据库")
# 得到一个可以执行 SQL 语句的光标对象
baoma = conn.cursor()
sql1="""create table if not exists MovieType(
tid int auto_increment primary key,
tname varchar(20),
tcontent varchar(200),
tdate datetime
)"""
baoma.execute(sql1)
sql2="insert into MovieType(tcontent,tname,tdate) values('喜剧
','这是一个搞笑的电影',now())"
sql3="insert into MovieType(tcontent,tname,tdate) values('动作
','这这是一个打斗的电影',now())"
baoma.execute(sql2)
conn.commit()
baoma.execute(sql3)
conn.commit()
print("插入成功")SelectData="select * from MovieType"
baoma.execute(SelectData)
data=baoma.fetchall()
for i in data:
print(i[0],i[1],i[2],datetime.datetime.strftime(i[3],"%Y
年%m 月%d 日"))
#关闭数据库
baoma.close()
conn.close()
print("关闭数据库")

面向对象 OOP

类是抽象的,对象是具体的,先有类才有对象

封装

类及对象包含属性和方法
属性:静态特征 全局变量 成员
方法:动态特征 函数 功能
类方法必须包含参数 self, 且为第一个参数, self 代表的是类的实例。
Python 中,所有以双下划线 __ 包起来的方法,统称为 Magic Method (魔术
方法),而
魔术方法不需要调用就可以自动执行。
触发机制:使用类创建对象之后立即触发
作用:初始化对象的成员 ( 给对象添加属性 )
# 类定义
class People:
name=""
age=0
def __init__(self,xingming,nianling):
self.name=xingming
self.age=nianling
def show(self):
print(f" 姓名是 {self.name}, 年龄是 {self.age}")
# 调用
if __name__=="__main__":
ldh=People(" 刘德华 ",50)
ldh.show()

继承

class 子类名 ( 父类名 ):
子类直接具备父类的属性和方法 解决代码重用问题,提高开发效率
方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法
class Student(People):
grade=""
def __init__(self, xingming, nianling,nianji):
super().__init__(xingming,nianling)
self.grade=nianji
def test(self):
print(f" 年级是 {self.grade}")
# 方法重写
def show(self):
print(f" 姓名是 {self.name}, 年龄是 {self.age}, 年级是 {self.grade}")
# 调用
if __name__=="__main__":
zjl=Student(" 周杰伦 ",20,52)
zjl.show()

三层架构---面向对象思想模型层

模型层
--- 新建文件夹 webDouban 创建文件 Model.py
import datetime
class MovieType:
tid=0
tname=""
tcontent=""
tdate=datetime.datetime.now()
def __init__(self,tid1,tname1,tcontent1):
self.tid=tid1
self.tname=tname1
self.tcontent=tcontent1
数据层
--- 创建文件 DAL.py
import pymysql
class DBHelper:
# 方法
# 数据库链接
def openDB(self):
global conn
conn=pymysql.connect(host="127.0.0.1",user="root",
password="root123456",database="test",charset="utf8")
global baoma
baoma=conn.cursor()
def closeDB(self):
baoma.close()
conn.close()
# 数据增删改
def edit(self,sql):
self.openDB()
result=baoma.execute(sql)
conn.commit()
self.closeDB()
return result
# 查询多条
def chaAll(self,sql):
self.openDB()
baoma.execute(sql)
result=baoma.fetchall()
self.closeDB() return result
# 查询一条
def chaOne(self,sql):
self.openDB()
baoma.execute(sql)
result=baoma.fetchone()
self.closeDB()
return result
class MovieTypeDAL(DBHelper):
def insert(self,mt):
sql=f"insert
into
MovieType
values({mt.tid},'{mt.tname}','{mt.tcontent}',now())"
return self.edit(sql)
def select(self):
sql="select * from MovieType"
return self.chaAll(sql)
def selectByTid(self,tid):
sql=f"select * from MovieType where tid={tid}"
return self.chaOne(sql)
def delete(self,tid):
sql=f"delete from MovieType where tid={tid}"
return self.edit(sql)
业务逻辑显示层
--- 创建文件 BLL.py
from Model import MovieType
from DAL import MovieTypeDAL
mtdal=MovieTypeDAL()
menu="""------------- 豆瓣网管理系统 -----------------
=========== 功能菜单 ===========
1 录入电影类型信息
2 修改电影类型信息
3 删除电影类型信息
4 显示所有电影类型信息
0 退出系统
============================="""
if __name__=="__main__":
while True:
print(menu)
option=input(" 请输入操作选项 :")
if option=="4":
result=mtdal.select() print(result)
elif option=="0":
answer=input(" 请问是否退出 ? y/n ): ")
if answer=="y":
print(" 已成功退出 ")
break

上机练习 8 三层架构开发豆瓣网

老师课件已经提供了大部分代码,我要做的就是添加和修改代码。
使用技术:
数据库: mysql
电影类型表: MovieType(tid,tname,tcontent,tdate)
项目文件夹: webDouban
模型层: Model 类名: MovieType
数据层: DAL 类名:父类 DBHelper ,子类 MovieTypeDAL
业务逻辑层: BLL 程序入口
------------- 豆瓣网管理系统 -----------------
=========== 功能菜单 ===========
1 录入电影类型信息
2 修改电影类型信息
3 删除电影类型信息
4 显示所有电影类型信息
0 退出系统
=============================
请输入操作选项: 1
请输入编号: 2
请输入名称:动画
请输入内容:这个小孩子非常喜欢
录入成功
=============================
请输入操作选项: 2
请输入修改编号: 888
此电影类型不存在
=============================
请输入操作选项: 2
请输入修改编号: 2
编号 名称 内容 创建日期
2 动画 这个小孩子非常喜欢 2023 04 29
请输入修改名称:动画 1 请输入修改内容:这个小孩子非常喜欢 1
修改成功
=============================
请输入操作选项: 3
请输入删除编号: 888
此电影类型不存在
=============================
请输入操作选项: 3
请输入删除编号: 2
编号 名称 内容 创建日期
2 动画 这个小孩子非常喜欢 2023 04 29
确认要删除吗?( y/n ): y
删除成功
=============================
请输入操作选项: 4
编号 名称 内容 创建日期
1 喜剧 这是一种搞笑的视频 2023 04 29
2 动画 这个小孩子非常喜欢 2023 04 29
=============================
请输入操作选项: 0
请问是否退出 ? y/n ): y
已成功退出
=============================
请输入操作选项: 5
不要乱来哦
Model.py:
import datetime
class MovieType:
tname=""
tcontent=""
tdate=datetime.datetime.now()
def __init__(self,tname1,tcontent1):
self.tname=tname1
self.tcontent=tcontent1
DAL.py:
import datetime
import pymysql
class DBHelper:
# 方法
# 数据库链接def openDB(self):
global conn
conn=pymysql.connect(host="127.0.0.1",user="root",
password="root123456",database="test",charset="utf8")
global baoma
baoma=conn.cursor()
# 关闭数据库
def closeDB(self):
baoma.close()
conn.close()
# 数据增删改
def edit(self,sql):
self.openDB()
result=baoma.execute(sql)
conn.commit()
self.closeDB()
return result
# 查询多条
def chaAll(self,sql):
self.openDB()
baoma.execute(sql)
result=baoma.fetchall()
self.closeDB()
return result
# 查询一条
def chaOne(self,sql):
self.openDB()
baoma.execute(sql)
result=baoma.fetchone()
self.closeDB()
return result
class MovieTypeDAL(DBHelper):
# 插入数据
def insert(self,mt):
sql=f"insert into MovieType(tname,tcontent,tdate)
values('{mt.tname}','{mt.tcontent}',now())"
return self.edit(sql)
# 查询数据
def select(self):
sql="select * from MovieType"
return self.chaAll(sql)
# 根据 id 号修改数据def update(self,tid,UpdateColumn,EndValue):
if type(EndValue)==str:
sql=f"update MovieType set
{UpdateColumn}='{EndValue}' where tid={tid}"
elif type(EndValue)==int :
sql=f"update MovieType set {UpdateColumn}={EndValue}
where tid={tid}"
elif type(EndValue)==datetime.datetime:
sql=f"update MovieType set
{UpdateColumn}='{EndValue}' where tid={tid}"
return self.edit(sql)
# 通过 id 号查询数据
def selectByTid(self,tid):
sql=f"select * from MovieType where tid={tid}"
return self.chaOne(sql)
# 通过 id 号删除数据
def delete(self,tid):
sql=f"delete from MovieType where tid={tid}"
return self.edit(sql)
BLL.py:
from Model import MovieType
from DAL import MovieTypeDAL
import datetime
mtdal=MovieTypeDAL()
menu="""-------------豆瓣网管理系统-----------------
===========功能菜单===========
1 录入电影类型信息
2 修改电影类型信息
3 删除电影类型信息
4 显示所有电影类型信息
0 退出系统
============================="""
if __name__=="__main__":
while True:
print(menu)
option=input("请输入操作选项:")
if option=="1":
tname=input("请输入名称:")
tcontent=input("请输入内容:")
OneMovie=MovieType(tname,tcontent)
mtdal.insert(OneMovie)print("录入成功")
elif option=="2":
tid=int(input("输入要修改编号:"))
if mtdal.selectByTid(tid)!=None:
print("编号","名称","内容","创建日期")
for i in mtdal.selectByTid(tid):
if i==mtdal.selectByTid(tid)[3]:
print(datetime.datetime.strftime(i,"%Y
年%m 月%d 日"))
else:
print(i,end=" ")
print()
Column=input("输入要修改的属性:")
if Column=="编号":
Column="tid"
elif Column=="名称":
Column="tname"
elif Column=="内容":
Column="tcontent"
elif Column=="创建日期":
Column="tdate"
else:
print("请输入正确的属性名!")
if Column=="tid":
Value=int(input("输入要修改的结果:"))
elif Column=="tname" or Column=="tcontent" or
Column=="tdate":
Value=input("输入要修改的结果:")
if Column=="tid" or Column=="tname" or
Column=="tcontent":
mtdal.update(tid,Column,Value)
print("修改成功")
elif Column=="tdate":
#
print(datetime.datetime.strptime(Value,"%Y%m%d"))
mtdal.update(tid,Column,datetime.datetime.s
trptime(Value,"%Y%m%d"))
print("修改成功")
else:
print("此电影类型不存在")
elif option=="3":
tid=int(input("输入要删除的电影的 id:"))
if mtdal.selectByTid(tid)!=None:print("编号","名称","内容","创建日期")
for i in mtdal.selectByTid(tid):
if i==mtdal.selectByTid(tid)[3]:
print(datetime.datetime.strftime(i,"%Y
年%m 月%d 日"))
else:
print(i,end=" ")
print()
answer=input("确认要删除吗?(y/n):")
if answer=="y":
mtdal.delete(tid)
print("删除成功")
else :
print("此电影类型不存在")
elif option=="4":
result=mtdal.select()
print("编号","名称","内容","创建日期")
for i in result:
print(i[0],i[1],i[2],datetime.datetime.strftime
(i[3],"%Y 年%m 月%d 日"))
elif option=="0":
answer1=input("请问是否退出? (y/n):")
if answer1=="y":
print("已成功退出")
break
else:
print("不要乱来哦")

关于我对 AI 写代码的看法:

实在不会的可以参考一下,要养成善于思考的习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392208.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户数据分析模型:RFM模型的深度解析与应用探索

RFM模型,作为客户数据分析中的经典工具,凭借其简单而强大的分析能力,被广泛应用于各行各业。本文旨在深入探讨RFM模型的核心原理、应用价值,并详细阐述其在2C(面向消费者)和2B(面向企业&#xf…

使用ThreadLocal来存取单线程内的数据

一.什么是ThreadLocal? ThreadLocal,即线程本地变量。如果你创建了一个 ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是在操作自己本地内存里面的变量&…

自注意力和位置编码

一、自注意力 1、给定一个由词元组成的输入序列x1,…,xn, 其中任意xi∈R^d(1≤i≤n)。 该序列的自注意力输出为一个长度相同的序列 y1,…,yn,其中: 2、自注意力池化层将xi当作key,value,query来…

Ubuntu配置carla docker环境

前言: 本文只在以下设备成功运行, 其他设备不保证能成功, 可以参考在自己设备进行配置 环境 ubuntu 20.04carla 0.9.15gpu 3060(notebook) 安装显卡驱动&nvidia-container-toolkit 显卡驱动 安装完成系统后直接在’软件和更新->附加驱动’直接选择470(proprietary…

Leetcode3227. 字符串元音游戏

Every day a Leetcode 题目来源:3227. 字符串元音游戏 解法1:博弈论 分类讨论: 如果 s 不包含任何元音,小红输。如果 s 包含奇数个元音,小红可以直接把整个 s 移除,小红赢。如果 s 包含正偶数个元音&am…

R 语言学习教程,从入门到精通,R 基础运算(5)

1、R 基础运算 本章介绍 R 语言的简单运算。 1.1、赋值 一般语言的赋值是 号&#xff0c;但是 R 语言是数学语言&#xff0c;所以赋值符号与我们数学书上的伪代码很相似&#xff0c;是一个左箭头 <- &#xff1a; a <- 123 b <- 456 print(a b)以上代码执行结果…

最好用的掏耳勺是哪种?年度五款可视挖耳勺高分机型

在我们的日常生活中&#xff0c;掏耳朵似乎是一件再平常不过的小事&#xff0c;不过&#xff0c;传统挖耳勺在使用时完全依赖我们的感觉和经验&#xff0c;我们无法直接看到耳道内部的情况。这就如同在黑暗中摸索&#xff0c;极易造成意外伤害。稍有不慎&#xff0c;就可能刮伤…

使用gitea私有仓库作为依赖

实际问题 由于公司团队使用gitea搭建了git私有仓库&#xff0c;在开发Go程序的时候会有一些公共代码&#xff0c;比如插件和主程序之间要共享接口和数据结构&#xff0c;所以就需要在gitea私有仓库中创建依赖仓库&#xff0c;然后其他仓库引用这个私有仓库作为依赖。 解决方案…

如何实现pxe安装部署

此实验环境&#xff1a;rhel7主机 一、kickstart自动化安装脚本 1、安装可视化图形 [rootlocalhost ~]# yum group install "Server with GUI" 2、关闭vmware dhcp功能&#xff08;编辑-虚拟网络编辑器&#xff09; 3、httpd 1、安装httpd服务 [rootlocalhost …

网鼎杯比赛二次注入技巧

文章目录 前端的网页展示分析题目暴力破解寻找代码找到注入点进行注入查询想要的文件 前端的网页展示 分析题目 1.目前我们能看到的只有三个页面&#xff0c;但是我们可以看到三个*号。 2.考虑三个*的密码是什么&#xff0c;这里可以采用暴力破解&#xff08;我们先猜这是三个…

会声会影下载免费吗?会声会影2023中文旗舰版下载及配置最低要求

**会声会影2024&#xff1a;引领视频创作新时代的创新之旅** 在数字时代的浪潮中&#xff0c;视频创作已成为连接世界、表达创意的重要方式。随着技术的不断进步&#xff0c;一款名为“会声会影2024”的视频编辑软件横空出世&#xff0c;它不仅继承了前代产品的优秀传统&#…

C#MQTT协议应用

1 &#xff0c;MQTT介绍&#xff1a;MQTT详解以及实际操作_mqtt使用-CSDN博客 2&#xff0c;MQTT应用&#xff1a; C#MQTT编程06--MQTT服务器和客户端(winform版)_c# mqtt服务器-CSDN博客 3&#xff0c;MQTT实例&#xff1a; 效果 代码&#xff1a; 服务端 public parti…

通过Stack Overflow线程栈溢出的问题实例,详解C++程序线程栈溢出的诸多细节

目录 1、问题说明 2、从Visual Studio输出窗口中找到了线索,发生了Stack Overflow线程栈溢出的异常 3、发生Stack Overflow线程栈溢出的原因分析 4、线程占用的栈空间大小说明 5、引发线程栈溢出的常见原因和场景总结 6、在问题函数入口处添加return语句,在Debug下运行…

TI音频功放TAS6511(二)

3.数字音频处理 芯片支持高级数字音频处理能力&#xff0c;包括&#xff1a; 高通滤波器/直流阻断 数字音量控制 PVDD的Foldback/AGL 热Foldback 双象限增益补偿 混合调制 实时负载诊断 低延迟路径 喇叭功率限制 1&#xff09;PVDD Foldback 本功能主要为了防止音频…

【Material-UI】Autocomplete中的禁用选项:Disabled options

文章目录 一、简介二、基本用法三、进阶用法1. 动态禁用2. 提示禁用原因3. 复杂的禁用条件 四、最佳实践1. 一致性2. 提供反馈3. 优化性能 五、总结 Material-UI的Autocomplete组件提供了丰富的功能&#xff0c;包括禁用特定选项的能力。这一特性对于限制用户选择、提供更好的用…

【你也能从零基础学会网站开发】SQL Server 2000中的数据类型之String字符串类型

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 SQL Server 中…

不用PS也能抠图?点哪抠哪,简直是职场人的最强助手

抠图你还在用 PS 一点点抠吗&#xff1f; 不仅费时费力&#xff0c;还常常达不到理想效果&#xff0c;真的太让人崩溃了 但别担心&#xff0c;我找到了一个超棒的工具——千鹿设计助手的AI智能抠图插件。它就像你的私人设计小助手&#xff0c;能快速帮你把想要的元素抠出来&…

《花100块做个摸鱼小网站! · 序》灵感来源

序 大家好呀&#xff0c;我是summo&#xff0c;这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛&#xff0c;2核2G的云服务器一年只要99块钱&#xff0c;懂行的人应该知道这个价格在业界已经是非常良心了&#xff0c;虽然优惠只有一年&a…

C++初阶学习——探索STL奥秘——模拟实现string类

1、string类的构造 上面的代码从表面看没什么问题&#xff0c;但是运行后会发现程序有多处bug 但是如上图一样&#xff0c;这样改进依然有bug 因为我们编写无参构造函数的时候&#xff0c;肯定要让_str默认为nullptr&#xff0c;但是这样的话&#xff0c;在main函数中创建对象…

电脑运行库问题怎么修复?电脑运行库修复工具分享与实操

在我们日常使用电脑的过程中&#xff0c;经常会遇到一些因为运行库缺失或损坏而导致软件无法正常运行的问题。这些问题不仅影响工作效率&#xff0c;还可能导致数据丢失或程序崩溃。那么&#xff0c;电脑运行库怎么修复呢&#xff1f;本文将为您详细介绍如何使用运行库修复工具…