教育机构网站建设方案书/怎么做app推广

教育机构网站建设方案书,怎么做app推广,云南疫情最新消息今天又封了,惠州网络推广费用示例代码: from loguru import logger from pymongo import MongoClient from pymongo.errors import ConnectionFailurefrom llm_engineering.settings import settingsclass MongoDatabaseConnector:_instance: MongoClient | None Nonedef __new__(cls, *args,…

示例代码:

from loguru import logger
from pymongo import MongoClient
from pymongo.errors import ConnectionFailurefrom llm_engineering.settings import settingsclass MongoDatabaseConnector:_instance: MongoClient | None = Nonedef __new__(cls, *args, **kwargs) -> MongoClient:if cls._instance is None:try:cls._instance = MongoClient(settings.DATABASE_HOST)except ConnectionFailure as e:logger.error(f"Couldn't connect to the database: {e!s}")raiselogger.info(f"Connection to MongoDB with URI successful: {settings.DATABASE_HOST}")return cls._instanceconnection = MongoDatabaseConnector()

详细解释

  1. 导入依赖模块

    from loguru import logger
    
    • 作用:导入 loguru 库中的 logger 对象。这个对象用于记录日志信息,比标准库中的 logging 更加方便和直观。
    • 举例:当程序运行时,可以用 logger.info("提示信息") 打印一条信息,比如记录连接成功或失败的日志。
    from pymongo import MongoClient
    
    • 作用:导入 pymongo 库中的 MongoClient 类。这个类用来创建与 MongoDB 数据库的连接。
    • 举例:假如你需要连接一个 MongoDB 数据库,其地址为 "mongodb://127.0.0.1:27017",就可以用 MongoClient("mongodb://127.0.0.1:27017") 来创建连接对象。
    from pymongo.errors import ConnectionFailure
    
    • 作用:从 pymongo 库中导入 ConnectionFailure 异常类,当连接数据库失败时,这个异常会被抛出。
    • 举例:如果数据库地址错误或者数据库没有启动,会抛出 ConnectionFailure 异常,我们可以捕获这个异常并记录错误日志。
    from llm_engineering.settings import settings
    
    • 作用:导入项目中 llm_engineering.settings 模块中的 settings 对象。这个对象通常存储配置参数,比如数据库的 URI 地址。
    • 举例:假设在 settings 中有定义 DATABASE_HOST = "mongodb://127.0.0.1:27017",那么代码会使用这个地址来连接数据库。
  2. 定义 MongoDatabaseConnector 类

    class MongoDatabaseConnector:_instance: MongoClient | None = None
    
    • 作用:定义一个类 MongoDatabaseConnector,用来管理 MongoDB 的连接。这里使用了一个类变量 _instance 来存储连接实例。
    • 解释_instance 初始值为 None,表示当前还没有创建数据库连接。类型提示 MongoClient | None 表示这个变量可能是一个 MongoClient 对象,也可能是 None
  3. 重写 new 方法实现单例模式

    def __new__(cls, *args, **kwargs) -> MongoClient:if cls._instance is None:try:cls._instance = MongoClient(settings.DATABASE_HOST)except ConnectionFailure as e:logger.error(f"Couldn't connect to the database: {e!s}")raiselogger.info(f"Connection to MongoDB with URI successful: {settings.DATABASE_HOST}")return cls._instance
    
    • 作用__new__ 是 Python 中的一个特殊方法,用于在创建实例之前进行控制。这里重写它实现了“单例模式”,即无论你创建多少次这个类的实例,都只会返回同一个 MongoClient 连接对象。

    • 详细步骤

      • 判断是否已存在连接

        if cls._instance is None:
        
        • 意思:如果 _instance 还是 None(表示还没有连接实例),则继续创建新的连接。
      • 尝试建立数据库连接

        try:cls._instance = MongoClient(settings.DATABASE_HOST)
        
        • 作用:调用 MongoClient 构造函数,使用 settings.DATABASE_HOST(例如 "mongodb://127.0.0.1:27017")来创建数据库连接。
        • 举例:假设 settings.DATABASE_HOST 定义为 "mongodb://192.168.1.100:27017",那么代码会试图连接到 IP 为 192.168.1.100、端口为 27017 的 MongoDB 实例。
      • 异常处理

        except ConnectionFailure as e:logger.error(f"Couldn't connect to the database: {e!s}")raise
        
        • 作用:如果连接失败(例如数据库没有启动、地址错误等),会捕获 ConnectionFailure 异常。
        • 解释:程序会通过 logger.error 输出错误日志,然后使用 raise 将异常继续抛出,确保调用者知道连接出了问题。
        • 举例:若连接失败并抛出异常,比如错误代码为 10061(连接被拒绝),错误日志会显示 "Couldn't connect to the database: [错误信息]"
      • 记录成功日志

        logger.info(f"Connection to MongoDB with URI successful: {settings.DATABASE_HOST}")
        
        • 作用:不论是首次连接还是复用已有连接,都记录一条信息日志,表明连接成功。
        • 举例:如果成功连接到 "mongodb://192.168.1.100:27017",日志中会显示 "Connection to MongoDB with URI successful: mongodb://192.168.1.100:27017"
      • 返回连接实例

        return cls._instance
        
        • 作用:返回创建好的 MongoClient 实例。这样,无论何时调用 MongoDatabaseConnector(),最终返回的都是同一个连接实例。
  4. 创建连接实例

    connection = MongoDatabaseConnector()
    
    • 作用:调用 MongoDatabaseConnector() 来获取 MongoDB 的连接实例。
    • 解释:这行代码实际上会触发上面定义的 __new__ 方法,判断是否需要创建新连接或直接返回已有连接。最终,变量 connection 存储了一个 MongoClient 对象。
    • 举例:如果第一次调用时创建连接,则 connection 可能代表一个连接到 "mongodb://192.168.1.100:27017" 的 MongoClient 实例;后续再调用时将复用这个实例。

总结

  • 单例模式:该代码使用了单例模式保证整个程序中只会创建一个数据库连接。这样可以避免重复创建连接资源,提升效率。
  • 错误处理:使用 try...except 捕获连接失败的情况,并通过日志记录错误信息,然后抛出异常,确保问题不会被忽略。
  • 日志记录:通过 logurulogger 对象,详细记录了连接的成功与失败状态,方便排查问题。
  • 实际场景举例
    假设你的数据库地址为 "mongodb://192.168.1.100:27017",第一次执行 MongoDatabaseConnector() 时:
    • 程序检查 _instanceNone
    • 连接成功后,将 MongoClient("mongodb://192.168.1.100:27017") 赋值给 _instance
    • 输出日志 “Connection to MongoDB with URI successful: mongodb://192.168.1.100:27017”;
    • 将该连接实例返回并赋值给 connection
      如果之后再调用 MongoDatabaseConnector(),程序就直接返回已存在的连接实例,不再重新连接。

这样写的好处是节省资源简化连接管理,同时通过日志记录帮助开发者快速定位数据库连接的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Bash是什么?怎么使用?

李升伟 整理 什么是 Bash? Bash(Bourne Again Shell)是一种 命令行解释器(Shell),广泛用于 Unix 和 Linux 操作系统。它是 Bourne Shell(sh) 的增强版,提供了更多的功能…

Qt Creator入门

1.创建项目 选择创建项目-Application(Qt)-Qt Widgets Application-修改名称即可 默认创建有窗口类,myWidget,基类有三种选择:QWidget,QMainWindow,QDialog 注意: 名称和创建路径不能有中文、…

咖啡点单小程序毕业设计(JAVA+SpringBoot+微信小程序+完整源码+论文)

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着社会的快速发展和…

003-掌控命令行-CLI11-C++开源库108杰

首选的现代C风格命令行参数解析器! (本课程包含两段教学视频。) 以文件对象监控程序为实例,五分钟实现从命令行读入多个监控目标路径;区分两大时机,学习 CLI11 构建与解析参数两大场景下的异常处理;区分三…

谱分析方法

前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 ima 知识库 知识库广场搜索&#…

【软考-架构】11.3、设计模式-新

✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 项目中的应用设计模式创建型设计模式结构型设计模式行为型设计模式 💯考试真题题外话 项目中的应用 在实际项目中,我应用过多种设计模式来解决不同…

Linux的Shell编程

一、什么是Shell 1、为什么要学习Shell Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。 对于JavaEE和Python程序员来说,工作的需要。Boss会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个…

论文阅读笔记:Deep Unsupervised Learning using Nonequilibrium Thermodynamics

1、来源 论文连接1:http://ganguli-gang.stanford.edu/pdf/DeepUnsupDiffusion.pdf 论文连接2(带appendix):https://arxiv.org/pdf/1503.03585v7 代码链接:https://github.com/Sohl-Dickstein/Diffusion-Probabilistic-Models 代码的环境配置…

Linux 查看及测试网络命令

使用 ifconfig 命令查看网络接口地址 查看指定的网络接口信息 执行 ifconfig ens33 命令可以只查看网卡 ens33 的配置信息

ABAP语言的动态编程(4) - 综合案例:管理费用明细表

本篇来实现一个综合案例:管理费用明细表。报表在实际项目中,也有一定的参考意义,一方面展示类似的报表,比如管理费用、研发费用等费用的明细,使用业务比较习惯的展示格式;另一方面正好综合运用前面学习的动…

【Redis】Redis的数据删除(过期)策略,数据淘汰策略。

如果问到:假如Redis的key过期之后,会立即删除吗? 其实就是想问数据删除(过期)策略。 如果面试官问到:如果缓存过多,内存是有限的,内存被占满了怎么办? 其实就是问:数据的淘汰策略。…

Linux配置yum仓库,服务控制,防火墙

一、yum仓库 1.在安装软件时,首先第一步就是要考虑软件的版本的问题! 2.软件的安装:最安全可靠的方法就是去软件对应的官网上查看安装手册(包括的软件的下载) 红帽系软件安装的常见的3种方式 (1&#x…

设计模式(创建型)-抽象工厂模式

摘要 在软件开发的复杂世界中,设计模式作为解决常见问题的最佳实践方案,一直扮演着至关重要的角色。抽象工厂模式,作为一种强大的创建型设计模式,在处理创建一系列或相关依赖对象的场景时,展现出了独特的优势和灵活性。它通过提供一个创建对象的接口,让开发者能够在不指定…

【JavaEE】-- SpringBoot快速上手

文章目录 1. Maven1.1 什么是Maven1.2 为什么要学Maven1.3 创建一个Maven项目1.4 Maven核心功能1.4.1 项目创建1.4.2 依赖管理1.4.3 Maven Help插件 1.5 Maven仓库1.5.1 本地仓库1.5.2 中央仓库1.5.3 私有服务器(私服) 1.6 Maven设置国内源1.6.1 配置当前…

TCP/IP 协议精讲-精华总结版本

序言 本文旨在介绍一下TCP/IP涉及得所有基础知识,为大家从宏观上俯瞰TCP/IP提供一个基石,文档属于《TCP/IP图解(第五版)》的精简版本。 专业术语 缩写 全称 WAN Wide area network广域网 LAN Local area network局域网 TC…

C语言——结构体、联合、枚举

C语言中自定义类型 结构体结构体变量的创建和初始化结构体传参结构体内存对齐(如何存储) 联合体(共用体)联合体创建和初始化联合体大小(如何存储) 枚举类型枚举类型创建枚举类型初始化枚举的优点(相较于define) 前言 C语言中有内置类型和自定义类型,内置类型就像int…

【Linux操作系统——学习笔记二】Linux简单导航命令操作

一、前言 学习Linux,本质上是学习在命令行下熟练使用Linux的各类命令。 命令行:是一种通过输入命令和参数与计算机系统进行交互的方式,可以使用各种字符化命令对系统发出操作指令,打开Linux终端,进入命令行界面。 …

新安装的cursor安装不了插件

我安装的cursor版本0.47.5 直接说解决办法 找到安装路径cursor\resources\app下的product.json 修改https://marketplace.cursorapi.com为https://marketplace.visualstudio.com

HTML5扫雷游戏开发实战

HTML5扫雷游戏开发实战 这里写目录标题 HTML5扫雷游戏开发实战项目介绍技术栈项目架构1. 游戏界面设计2. 核心类设计 核心功能实现1. 游戏初始化2. 地雷布置算法3. 数字计算逻辑4. 扫雷功能实现 性能优化1. DOM操作优化2. 算法优化 项目亮点技术难点突破1. 首次点击保护2. 连锁…

Qt之自定义界面组件 一

通过qt中的painter绘图事件绘制一个电池电量图的变化。效果如下图 创建一个基于界面widget工程,在wdiget界面添加一个widget界面,将添加的widget界面的类提升为Tbattery.在Tbattery类中重写painEvent电池电量代码 文件目录结构 主要部分代码 //Tbattery.cpp #inc…