智能体测开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")
相关推荐
番茄炒鸡蛋加糖1 小时前
Redis--Lua 脚本原子性与滑动窗口限流
数据库·redis·lua
瀚高PG实验室2 小时前
DELETE 条件字段缺少索引导致 SuperSync 同步严重延迟
数据库·postgresql·瀚高数据库
笃行3502 小时前
优化器凭什么改写你的 SQL:等价变换、条件调度与主流数据库的取舍
数据库
KaMeidebaby2 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
千维百策6662 小时前
运用 SRE 原则降低生产事故影响:CRE 实战经验与可靠性优化方法
网络·数据库·人工智能
笃行3502 小时前
能跑不等于正确:生产环境不规范 SQL 的隐藏风险与编码规范
数据库
Database_Cool_3 小时前
云数据库控制台好不好用、能不能可视化操作:阿里云 RDS MySQL 控制台体验详解
数据库·mysql·阿里云
霸道流氓气质3 小时前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
吴声子夜歌3 小时前
MongoDB 4.x——应用设计调优
数据库·mongodb