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

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

电子商务网站建设首页流程外贸网站有哪些

第一章:Open-AutoGLM脑机接口交互辅助的崛起背景随着神经科学与人工智能技术的深度融合,脑机接口(Brain-Computer Interface, BCI)正从实验室走向实际应用。Open-AutoGLM作为一款开源的自动语言生成模型驱动的BCI交互辅助系统&…

张小明 2025/12/27 5:43:28 网站建设

单位网站建设工作总结运城做网站要多少钱

Unity游戏翻译神器:XUnity.AutoTranslator三步搞定多语言无障碍体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏中的对话和界面文字头疼吗?想要畅玩全球热门游戏…

张小明 2025/12/27 5:42:56 网站建设

江苏省建设执业网站中山h5模板建站

简介 Google发布Gemini 3 Flash模型,以Claude 1/5、GPT 1/4的价格提供了超越旗舰的能力。它在编码、多模态理解和科学推理等基准测试中表现优异,重新定义了"Flash"模型概念。普通用户可在Gemini App免费体验,开发者可低成本部署&am…

张小明 2025/12/27 5:42:24 网站建设

制作网站的心得做盗版视频网站犯法吗

模块化量化框架终极指南:7步构建智能投资系统 【免费下载链接】zvt modular quant framework. 项目地址: https://gitcode.com/foolcage/zvt 在量化投资领域,技术复杂性常常成为策略实现的障碍。ZVT框架通过创新的模块化设计,将复杂的…

张小明 2025/12/27 5:41:53 网站建设

网站建设的相关新闻沧州软件开发公司

深入探索Azure:诊断、部署与运行全解析 1. Azure诊断与数据处理 Azure提供了丰富的诊断信息,便于我们对应用程序进行监控和分析。在处理诊断数据时,我们可以将其持久化到Table或Blob存储中。以下是将缓冲数据传输到存储的代码示例: Dim transferOptions As OnDemandTra…

张小明 2025/12/27 5:41:21 网站建设