智能体测开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")
相关推荐
wno7043 小时前
postgresSQL压缩版安装与基本命令
数据库·postgresql
聚美智数5 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
瀚高PG实验室5 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
ben9518chen6 小时前
mysql数据库基本操作
数据库·mysql
2603_965148116 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe6 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
缓慢更新7 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Web3&Basketball8 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化
xiaogai_gai9 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
注塑机数据采集联网9 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析