文章知识点:
1.python中,同样的功能,可封装为工具,重复利用
2.功能模块化编程
实际案例:顾客管理
程序需要实现以下顾客管理功能,数据读取和写入到mysql中
以此为例子,从数据库读取修改顾客信息,会反复链接数据库,获取游标,关闭游标,关闭链接,这一块可变为一个功能closecon(),在调用中使用
class DBUtil:
# 数据库配置为类属性
config = {'host': 'localhost', 'database': 'test', 'port': 3306, 'user': 'root', 'passwd': 'root',
'charset': 'utf8'}
# 获取一个和数据库交互的工具cursor
def __init__(self):
'''创建数据库连接和coursor'''
self.con = pymysql.connect(**DBUtil.config)
self.cursor = self.con.cursor()
def closecon(self):
'''关闭coursor和数据库连接'''
self.cursor.close()
self.con.close()
def exec_dml(self, sql, *args):
'''执行DML语句'''
try:
self.cursor.execute(sql, args) # 使用executemany同事执行多条数据
self.con.commit()
#result = self.cursor.fetchall()
except BaseException as errorm: # 抛出错误原因
# 如果发生错误则回滚
self.con.rollback()
print("error:", errorm)
finally:
self.closecon()
def query_all(self, sql, *args):
'''查找数据'''
try:
self.cursor.execute(sql, args) # 使用executemany同事执行多条数据
result = self.cursor.fetchall()
for i in result:
print('顾客名字:{0},邮箱:{1},生日:{2}'.format(i[0],i[1],i[2]))
except BaseException as errorm: # 抛出错误原因
# 如果发生错误则回滚
self.con.rollback()
print("error:", errorm)
finally:
self.closecon()
顾客管理支持新增顾客,删除和查询等,将功能模块化,分功能调用。并且在新增、删除、修改等DML操作,使用class DBUtil中的exec_dml()同一个方法
class CustomerManagment:
def __int__(self, username, email, birthdate):
self.username = username
self.email = email
self.birthdate = birthdate
def menu(self):
print('--' * 40)
print(' 顾客管理 v1.0')
print('1.添加顾客信息')
print('2.删除顾客信息')
print('3.修改顾客信息')
print('4.查询顾客信息')
print('5.遍历所有顾客信息')
print('6.退出系统')
print('--' * 40)
def add_cus(self):
'''1.添加顾客信息'''
# 定义客户字典
cusdic = {}
cusdic['username'] = input('请输入顾客名称:')
cusdic['emai'] = input('请输入顾客邮箱:')
cusdic['birthdate'] = input('请输入顾客生日:')
values = []
for i in cusdic.values():
values.append(i)
sql = '''insert into d_customer(username,email,birthdate) values('%s','%s','%s');''' % (values[0], values[1], values[2])
return sql
print('添加的顾客名字:{0},邮箱:{1},生日:{2}'.format(values[0], values[1], values[2]))
def del_cus(self):
'''2.删除顾客信息'''
pass
def alter_cus(self):
'''3.修改顾客信息'''
pass
def select_cus(self):
'''4.查询顾客信息'''
pass
def showall_cus(self):
'''5.遍历所有顾客信息'''
sql = 'select username,email,birthdate from d_customer limit 10000;'
return sql
主程序调用,演示插入和查询功能,中间234同理
if __name__ == '__main__':
while True:
DB=DBUtil()
Customerobj=CustomerManagment()
Customerobj.menu()
funcno = int(input('请输入你要执行的功能:'))
if funcno == 1:
sql=Customerobj.add_cus()
DB.exec_dml(sql)
elif funcno == 2:
pass
elif funcno == 3:
pass
elif funcno == 4:
pass
elif funcno == 5:
sql=Customerobj.showall_cus()
DB.query_all(sql)
elif funcno == 6:
print('系统退出成功,欢迎下次使用')
break
else:
print('输入编号有误,请重新输入')