一 回滚提交操作
"""
开始编程步骤:
begin ----- 增删改查的语句 ----- rollback 回滚 撤销操作 ----- commit 提交数据
编程实现事务控制 python操作mysql 默认事务已经打开
代码操作实现*N个步骤放到一个try异常处理块中,出现异常添加回滚
"""
1.第一种情况是修改之后直接进行提交然后进行关闭
import pymysql
def transform():
conn=pymysql.connect(host="localhost",port=3306,user="root",passwd="root",db="transform",charset="utf8")
cur=conn.cursor()
cur.execute("update user set balance=balance-200 where uname='张华'")
try:
cur.execute("update user set balance=balance+200 where uname='张刚'")
except:
print("***操作错误***")
print("***操作成功***")
conn.commit()
conn.close()
if __name__ == '__main__':
transform()
2.第二种方式* 对数据库进行操作之后提交数据库之后,
在数据库中还是原来的数据因为进行了回滚操作
import pymysql
def transform():
conn=pymysql.connect(host="localhost",port=3306,user="root",passwd="root",db="transform",charset="utf8")
cur=conn.cursor()
try:
cur.execute("insert into transform values(default,'花花',25000)")
cur.execute("insert into transform values(default,'乎乎',6000)")
except:
#如果是报错或者要撤销上一步操作的话
conn.rollback()
print("执行结束!")
#如果步骤都正常提交到数据库
conn.commit()
conn.close()
if __name__ == '__main__':
transform()
二 日志文件 xx.log 作用是 程序的敏感信息和异常信息会被单独写在一个文本文件中,该文件叫做 系统日志文件
日志信息可以人为的分为几个级别: noset debug info warning error critical
在python中自带的日志模块 import logging
在日志中进行的操作*
1.导入日志模块python自带
import logging
2.获得日志记录器
logger = logging.getLogger()
3.指定处理的文件
files = logging.FileHandle('test.log',encoding='utf8',mode='a')
4.日志的格式时间名称级别信息
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s %(message)s')
#设置格式化
fh.setFormatter(format)
logger.addHandler(fh)
logger.setLevel(logging.DEBUG)
logging.info(name)
简单的自定义格式日志记录器!
import logging
logging.basicConfig(filename='access.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=10)
logging.debug('调试debug')
logging.info('消息info')
logging.warning('警告warn')
logging.error('错误error')
logging.critical('严重critical')
日志模板logging的 对象 Formatter / Handler / Logger / Filter
logger 产生日志的对象
Filter 过滤日志的对象
Handler 接收日志然后控制打印到不同的地方 FileHandler
Formatter 可以定制不同的日志格式对象
"""
import logging
def shop_logging(name):
name=name+"登陆成功"
logger=logging.getLogger()
files=logging.FileHandler('test.log',encoding='utf8',mode='a')
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s * %(message)s')
files.setFormatter(formatter)
logger.addHandler(files)
logger.setLevel(logging.DEBUG)
logging.info(name)
shop_logging("admin")
运行结果展示* test.log
三 ATM取款机 日志记载 Logging
#导入模块 pyhon中自带logging日志模块 用logging.出来他们的方法和属性
import logging
import re
#加载配置 (日志配置在工具类中已经写好)
#添加的全局的日志格式配置
logging.basicConfig(filename='access.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(module)s * %(message)s ',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=20)
def login():
print("""
********************ATM取款机*******************
1.取款功能
2.转账功能
3.存款功能
4.查询功能
0.退出功能
""")
option=input("请选择菜单*")
option_str=re.sub("\D","",option)
if option_strin ["1","2","3","4","0"]:
option_int=int(option_str)
if option_int==1:
get()
elif option_int==2:
trans()
elif option_int==3:
save()
elif option_int==4:
show()
elif option_int==0:
print("退出转账系统***")
mark=False
#调试过程可以使用print 但是上线之后必须去掉print 太多的print会影响运行效率
def get():
logging.info("用户选择了取款***")
def trans():
logging.error("用户选择了转账***")
def save():
print("进行存款***")
def show():
print("进行查询***")
if __name__ =='__main__':
login()
运行结果*
网友评论