个人网站的优点搜索引擎和浏览器

张小明 2026/1/2 7:55:32
个人网站的优点,搜索引擎和浏览器,网站开发 报价单,wordpress修改html《用 Python 单例模式打造稳定高效的数据库连接管理器》“数据库连接不是越多越好#xff0c;而是越稳越妙。”——写给每一位追求高可用架构的 Python 开发者一、引言#xff1a;数据库连接背后的隐患与挑战 在日常开发中#xff0c;数据库是后端系统的核心支柱之一。无论是…《用 Python 单例模式打造稳定高效的数据库连接管理器》“数据库连接不是越多越好而是越稳越妙。”——写给每一位追求高可用架构的 Python 开发者一、引言数据库连接背后的隐患与挑战在日常开发中数据库是后端系统的核心支柱之一。无论是 Web 应用、数据分析平台还是自动化工具几乎都离不开数据库的支撑。然而很多初学者在构建系统时常常忽视了一个关键问题数据库连接的创建是昂贵的操作。每一次连接数据库背后都涉及网络握手、认证、资源分配等多个步骤。如果在系统中频繁创建连接不仅会拖慢性能还可能导致连接池耗尽、服务崩溃。那么如何优雅地管理数据库连接既保证性能又避免资源浪费这正是本文要探讨的核心使用单例模式Singleton实现数据库连接管理器。二、为什么选择单例模式单例模式的核心思想是一个类只能有一个实例并提供全局访问点。这与数据库连接的需求天然契合唯一性一个数据库连接对象即可满足大多数应用场景。共享性多个模块可共享同一个连接避免重复创建。可控性集中管理连接生命周期便于调试与优化。三、Python 中实现单例的几种方式在进入数据库实战之前我们先快速回顾几种常见的 Python 单例实现方式。1. 模块级单例最简单Python 的模块本身就是单例的。# db_connection.pyimportsqlite3 connsqlite3.connect(example.db)# main.pyfromdb_connectionimportconn cursorconn.cursor()cursor.execute(SELECT * FROM users)适用于简单项目但不易扩展和控制。2. 使用装饰器实现单例defsingleton(cls):instances{}defwrapper(*args,**kwargs):ifclsnotininstances:instances[cls]cls(*args,**kwargs)returninstances[cls]returnwrappersingletonclassConfig:def__init__(self):self.db_urlsqlite:///example.db3. 使用类变量实现单例推荐classSingleton:_instanceNonedef__new__(cls,*args,**kwargs):ifnotcls._instance:cls._instancesuper().__new__(cls)returncls._instance这种方式更灵活适合复杂逻辑的封装。四、实战构建一个数据库连接单例类我们以 SQLite 为例构建一个可复用的数据库连接管理器。1. 基础版本importsqlite3classDatabase:_instanceNonedef__new__(cls,db_pathexample.db):ifcls._instanceisNone:cls._instancesuper().__new__(cls)cls._instance._connsqlite3.connect(db_path)returncls._instancedefget_connection(self):returnself._conn使用示例db1Database().get_connection()db2Database().get_connection()print(db1isdb2)# True说明是同一个连接2. 增强版支持线程安全 自动重连importsqlite3importthreadingclassThreadSafeDB:_instanceNone_lockthreading.Lock()def__new__(cls,db_pathexample.db):ifcls._instanceisNone:withcls._lock:ifcls._instanceisNone:cls._instancesuper().__new__(cls)cls._instance._connsqlite3.connect(db_path,check_same_threadFalse)returncls._instancedefget_connection(self):try:self._conn.execute(SELECT 1)exceptsqlite3.ProgrammingError:self._connsqlite3.connect(example.db,check_same_threadFalse)returnself._conn五、支持多数据库类型的通用连接管理器在实际项目中我们可能需要支持多种数据库如 SQLite、MySQL、PostgreSQL。我们可以进一步抽象出一个通用的连接工厂。1. 使用工厂 单例组合importsqlite3importthreadingimportpymysqlimportpsycopg2classDBFactory:_instances{}_lockthreading.Lock()classmethoddefget_connection(cls,db_type,**kwargs):key(db_type,tuple(sorted(kwargs.items())))ifkeynotincls._instances:withcls._lock:ifkeynotincls._instances:ifdb_typesqlite:connsqlite3.connect(kwargs[db])elifdb_typemysql:connpymysql.connect(**kwargs)elifdb_typepostgres:connpsycopg2.connect(**kwargs)else:raiseValueError(Unsupported DB type)cls._instances[key]connreturncls._instances[key]使用示例conn1DBFactory.get_connection(sqlite,dbexample.db)conn2DBFactory.get_connection(sqlite,dbexample.db)print(conn1isconn2)# True六、项目实战构建一个用户管理系统我们将使用 Flask SQLite 单例数据库连接构建一个简单的用户管理 API。1. 项目结构user_app/ ├── app.py ├── db.py └── models.py2. db.py数据库连接单例importsqlite3importthreadingclassDB:_instanceNone_lockthreading.Lock()def__new__(cls,db_pathusers.db):ifcls._instanceisNone:withcls._lock:ifcls._instanceisNone:cls._instancesuper().__new__(cls)cls._instance._connsqlite3.connect(db_path,check_same_threadFalse)cls._instance._conn.row_factorysqlite3.Rowreturncls._instancedefget_conn(self):returnself._conn3. models.py用户模型操作fromdbimportDBdefinit_db():connDB().get_conn()cursorconn.cursor()cursor.execute( CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT ) )conn.commit()defadd_user(name,email):connDB().get_conn()cursorconn.cursor()cursor.execute(INSERT INTO users (name, email) VALUES (?, ?),(name,email))conn.commit()defget_users():connDB().get_conn()cursorconn.cursor()cursor.execute(SELECT * FROM users)returncursor.fetchall()4. app.pyFlask 接口fromflaskimportFlask,request,jsonifyfrommodelsimportinit_db,add_user,get_users appFlask(__name__)init_db()app.route(/users,methods[POST])defcreate_user():datarequest.json add_user(data[name],data[email])return{status:success}app.route(/users,methods[GET])deflist_users():usersget_users()returnjsonify([dict(u)foruinusers])if__name____main__:app.run(debugTrue)七、最佳实践与注意事项连接池优先在生产环境中推荐使用连接池如 SQLAlchemy、Peewee管理连接。关闭连接对于非持久连接使用with上下文管理器或手动关闭。异常处理连接失败、断开等异常需妥善处理避免程序崩溃。线程安全多线程环境下确保连接对象是线程安全的如设置check_same_threadFalse。八、前沿视角单例 异步数据库连接随着异步编程的普及像asyncpg、aiomysql等异步数据库库逐渐流行。我们也可以将单例模式与异步连接结合importasyncpgimportasyncioclassAsyncDB:_poolNoneclassmethodasyncdefget_pool(cls):ifcls._poolisNone:cls._poolawaitasyncpg.create_pool(databasetest,useruser,passwordpass)returncls._pool
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

仿xss网站搭建微做网站

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个bpmn-js效率对比演示工具,左侧展示传统代码方式实现简单采购流程(需手动编写XML),右侧展示使用bpmn-js可视化编辑同样流程。…

张小明 2025/12/28 23:33:10 网站建设

网站建设合同图片广东华业建设有限公司网站

在当今数字化时代,小说软件已成为众多写作者的得力助手。它不仅能够提供便捷的创作环境,还能帮助写作者提高创作效率和质量。然而,市场上的小说软件琳琅满目,如何选择一款适合自己的软件成为了许多写作者面临的难题。据《2025年中…

张小明 2025/12/28 15:36:50 网站建设

邢台建设企业网站价格上海网站改版服务

影刀RPAAI强强联合!小红书品牌笔记自动创建,效率提升20倍!🚀还在为品牌合作笔记的重复劳动头疼?手动创建、格式调整、内容校对耗尽心力的日子该结束了!今天,我将分享一个AI加持的影刀RPA解决方案…

张小明 2025/12/28 12:20:14 网站建设

优质网站有哪些小程序定制开发中软

在寻找能够满足最苛刻工作负载的存储解决方案吗?让我们来认识联想的下一代NVMe解决方案——DE6600系列。它专为速度、简便性和可扩展性而打造,让您能够专注于真正重要的事情:驱动业务发展。产品亮点两款强大型号:DE6600F提供全闪存…

张小明 2025/12/28 12:21:42 网站建设

网站前端 设计做spa的网站怎么推广

如何快速获取同花顺问财数据:pywencai完整使用指南 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai pywencai是一个强大的Python开源工具,专门用于帮助用户轻松获取同花顺问财平台的股票数据…

张小明 2025/12/28 17:44:43 网站建设

建立平台网站需要花多少钱南京中企动力有限公司

目录 一、回忆类加载过程 二、类加载器 1、定义与本质 2、JVM内置类加载体系 3、自定义类加载器 ClassLoader类中的两个关键方法: 核心原则: 4、类加载器加载的顺序 (1)核心:双亲委派模型下的委托与加载顺序 1&#xff…

张小明 2025/12/29 18:09:37 网站建设