智能体测开Day33

db

python 复制代码
'''
数据库的三个基本封装
1)链接数据库
2)执行sql语句
3)关闭数据库
'''
import pymysql


# 获取链接对象
def my_connect(dbinfo):
    try:
        conn = pymysql.connect(user=dbinfo['user'], password=dbinfo['pwd'], host=dbinfo['host'], port=dbinfo['port'], database=dbinfo['database'],
                               charset=dbinfo['charset'])
        print("数据库链接成功")
        return conn
    except Exception as e:
        print(f"数据库链接失败:{e}")

# 执行sql操作
def my_execute(conn,sql):
    try:
        # 链接对象获取游标对象
        cs = conn.cursor()
        # 游标可以去执行sql语句
        # sql = "select * from stu"
        # sql = "update stu set name='tom1' where id = 1"
        cs.execute(sql)
        # 提交
        conn.commit()
        # 游标获取sql语句的返回信息
        r = cs.fetchall()
        print(f"执行sql语句{sql}成功")
        return r
    except Exception as e:
        print(f"执行sql语句{sql}出错")


# 关闭
def my_close(conn):
    try:
        conn.close()
        print(f"关闭数据库成功")
    except Exception as e:
        print(f"关闭数据库失败")

# 删除所有用户,除了admin
def delete_all(dbinfo):
    con = my_connect(dbinfo)
    sql = "delete from sys_user where account != 'admin'"
    my_execute(con,sql)
    my_close(con)


# 添加信息 根据用户名和邮箱
def insert_by_account_and_email(dbinfo,account,email):
    con = my_connect(dbinfo)
    sql = f"INSERT INTO `ranzhi`.`sys_user` (`dept`, `account`, `password`, `realname`, `role`, `nickname`, `admin`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `site`, `mobile`, `phone`, `address`, `zipcode`, `visits`, `ip`, `last`, `ping`, `fails`, `join`, `locked`, `deleted`, `status`) VALUES ( 0, '{account}', 'c7122a1349c22cb3c009da3613d242ab', 'admin', '', '', 'super', '', '2000-02-02', 'u', '{email}', '', '', '', '', '', '', '', '', '', '', 304, '127.0.0.1', '2026-07-23 17:10:25', '2026-07-23 17:27:54', 0, '2026-05-08 10:44:58', '2000-10-10 10:02:02', '0', 'offline');"
    my_execute(con,sql)
    my_close(con)

# 根据用户名删除信息
def delete_by_account(dbinfo,account):
    con = my_connect(dbinfo)
    sql = f"delete from sys_user where account = '{account}'"
    my_execute(con,sql)
    my_close(con)

if __name__ == '__main__':
    dbinfo = {"user": 'root', 'pwd': '123456', 'host': '127.0.0.1', 'port': 3306, 'database': 'ranzhi',
              'charset': 'utf8'}
    # delete_by_account(dbinfo,"aaa")
    # delete_all(dbinfo)
    insert_by_account_and_email(dbinfo,'111','kasdf@dsjf.com')

logger日志处理器

python 复制代码
'''
1)python的内置库:logging 用来管理日志
2)日志的级别:debug info warning error critical
DEBUG
最详细的日志级别,输出程序运行时的内部状态和变量值
主要用于开发阶段的调试和问题诊断
生产环境通常关闭此级别日志

INFO
记录程序正常运行的关键节点信息
用于确认系统按预期工作,如服务启动、配置加载等
适合生产环境的基础监控

WARNING
表示非预期但可恢复的异常情况
例如磁盘空间不足、网络延迟等潜在问题
程序仍能继续运行但需要关注

ERROR
标记功能模块执行失败的重要错误
如数据库连接失败、API调用异常等
需要立即干预但不会导致程序终止

CRITICAL
最高级别,表示系统级致命错误
例如内存溢出、关键服务崩溃等
通常会导致程序不可恢复地终止运行
3)日志默认级别:warning,日志中的内容是向上兼容的,设置级别为info,日志中的内容:info warning error critical
'''
import logging
import sys

from ranzhiProject.caw.read_file import get_project_path


class Logger:
    def __init__(self):
        # 创建日志对象
        self.logger = logging.getLogger()
        self.logger.setLevel("INFO")


    def console(self,levle,message):
        '''
        日志对象需要设置处理器handler,handler决定了日志打印在控制台还是写入文件中,日志的格式等
        文件日志处理器FileHandler,有了他,日志就能写入文件中了
            filename‌:日志文件路径及名称(支持绝对/相对路径)
            mode‌:文件打开模式(默认追加模式 'a',或覆盖写入模式 'w')
            encoding‌:文件编码格式(默认系统编码,可指定为 'utf-8')
        控制台打印日志处理器 StreamHandler,能将日志打印在控制台
        '''
        #文件日志处理器FileHandler
        filename = get_project_path() + "\\" + "logs\\log.txt"
        filehandler = logging.FileHandler(filename=filename,mode="a",encoding="utf-8")

        # 日志的打印格式
        formater = logging.Formatter('[%(asctime)s]-[%(filename)s]-[%(levelname)s]:%(message)s')
        filehandler.setFormatter(formater)

        # 日志对象添加处理器
        self.logger.addHandler(filehandler)

        #控制台打印日志处理器 StreamHandler
        syshandler = logging.StreamHandler(sys.stdout)
        syshandler.setFormatter(formater)
        self.logger.addHandler(syshandler)

        if levle == "DEBUG":
            self.logger.debug(message)
        elif levle == "INFO":
            self.logger.info(message)
        elif levle == "WARNING" :
            self.logger.warning(message)
        elif levle == "ERROR" or levle=="Error":
            self.logger.error(message)
        else:
            self.logger.critical(message)

        # 为避免重复打印日志,要移除处理器handler
        self.logger.removeHandler(filehandler)
        self.logger.removeHandler(syshandler)

        # 关闭文件处理器
        filehandler.close()

    def debug(self,message):
        self.console("DEBUG",message)

    def info(self,message):
        self.console("INFO", message)

    def warning(self,message):
        self.console("WARNING", message)

    def error(self,message):
        self.console("ERROR", message)

    def critical(self,message):
        self.console("CRITICAL", message)

if __name__ == '__main__':
    logger = Logger()
    logger.info("this is info")
    logger.debug("this is debug")
    logger.warning("this is warning")
    logger.error("this is error")
    logger.critical("this is critical")
相关推荐
Bruce_Liuxiaowei43 分钟前
基于微步在线威胁情报的公网 IP 攻击迹象监测:threatbook_query 脚本全解析与 BruceSec 平台整合实践
数据库·tcp/ip·安全·网络安全·智能体
码农颜1 小时前
5.6.2 ⾏级锁死锁
数据库·sql·oracle
ChaHae-In1 小时前
MyBatis动态SQL与MyBatis-Plus高效开发指南
数据库·oracle·mybatis
冰暮流星1 小时前
mysql之分组查询
数据库·mysql
倒流时光三十年2 小时前
PostgreSQL Semi-Join(半连接)通俗讲解
数据库·postgresql
NiceCloud喜云3 小时前
腾讯云国际版云数据库选型:MySQL、Redis 怎么按业务架构来判断
数据库·mysql·腾讯云
ew452183 小时前
MySQL JOIN 关联语法、差异、标准用法、经典坑点汇总
数据库·mysql
Rain的Java大神之路4 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
Nturmoils4 小时前
给运营导个 CSV,在 ksql 里用 \copy 就够了
数据库
ciqingloveless4 小时前
Oracle打开数据库加密
数据库·oracle