哈尔滨建站系统点击查看团队建设优缺点

张小明 2026/1/10 9:48:44
哈尔滨建站系统点击查看,团队建设优缺点,公司网站开发费算什么费用,资源网址推荐安全的《用 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进行投诉反馈,一经查实,立即删除!

建筑网片的用途和作用有哪些乐云seo网站建设性价比高

reinstall系统重装工具:从新手到专家的完整使用指南 【免费下载链接】reinstall 又一个一键重装脚本 项目地址: https://gitcode.com/GitHub_Trending/re/reinstall 还在为服务器系统重装而头疼吗?传统方法需要下载镜像、配置分区、设置网络参数&…

张小明 2026/1/7 4:30:04 网站建设

销售网站室内设计公司企业简介

ASP TextStream 引言 ASP TextStream 是一种在 Active Server Pages (ASP) 中用于读取和写入文本文件的组件。它提供了对文件进行逐行读取、写入和修改的强大功能。本文将详细介绍 ASP TextStream 的功能、使用方法以及在实际开发中的应用。 ASP TextStream 的功能 ASP TextStr…

张小明 2026/1/7 10:33:42 网站建设

专门设计网站的公司叫什么wordpress禁止用户留言

单孔双芯光纤是一种特殊结构的光纤,其特点是在单个包层(cladding)内包含两根独立纤芯(cores),通过精密设计实现光信号的双通道传输或特殊光学功能。以下是其核心要点:1. 结构与工作原理&#xf…

张小明 2026/1/2 21:11:45 网站建设

做网站不会写代码图片自动导入wordpress

Langchain-Chatchat与Notion知识库同步的实现路径 在企业知识管理日益复杂的今天,一个常见的矛盾逐渐浮现:业务团队习惯使用像 Notion 这样直观、灵活的协作工具记录文档和流程,而这些宝贵的知识却“沉睡”在页面中,难以被快速检索…

张小明 2026/1/4 6:56:19 网站建设

福建省建设厅招标网站wordpress.程序做

FaceFusion人脸额头宽度比例协调算法上线 在数字人、虚拟主播和影视特效日益普及的今天,AI驱动的人脸替换技术早已超越简单的“换脸”范畴,转向对真实感与结构一致性的极致追求。尽管深度学习模型已经能在纹理层面实现近乎完美的肤色融合,但一…

张小明 2026/1/4 5:02:27 网站建设