目录
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 写代码的看法:
实在不会的可以参考一下,要养成善于思考的习惯。