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