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

张小明 2026/1/9 23:01:27
个人网站的优点,搜索引擎和浏览器,网站开发 报价单,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进行投诉反馈,一经查实,立即删除!

青岛网站推广哪家便宜长沙企业网站建设

第一章:Dify工作流分支跳转的核心机制Dify作为一款面向AI应用开发的工作流引擎,其核心能力之一在于支持动态、条件驱动的流程控制。在复杂业务场景中,用户常需根据运行时数据决定执行路径,Dify通过“分支跳转”机制实现这一需求&a…

张小明 2025/12/29 11:29:01 网站建设

做问卷调查哪个网站好全国城乡和住房建设厅查询网

ESP32音频开发实战:从入门到精通的完整指南 【免费下载链接】ESP32-audioI2S Play mp3 files from SD via I2S 项目地址: https://gitcode.com/gh_mirrors/es/ESP32-audioI2S 在智能家居、物联网设备和嵌入式系统日益普及的今天,ESP32凭借其强大的…

张小明 2026/1/3 18:27:27 网站建设

网站内容设计模板wordpress设计类网站

仲景中医AI大模型:终极本地部署与实战指南 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪,专为传统中医领域打造的预训练大语言模型。 The first-ever Traditional Chinese Medicine large langu…

张小明 2026/1/7 11:36:02 网站建设

网站开发中界面平面设计公司起名

GPT-SoVITS语音合成新纪元:从一分钟语音到声音分身 在虚拟主播动辄收获百万粉丝的今天,你有没有想过——他们说话的声音,可能只用了本人1分钟录音就“克隆”而成?这不是科幻,而是当下正悄然发生的现实。随着生成式AI对…

张小明 2026/1/7 13:50:49 网站建设

ps做图软件怎么下载网站怎样创建一个网址

1、一个AI应用的尝试: 最开始,我们接手了一个典型的企业知识库 Agent 项目,企业有海量的数据,涵盖生产、运维、财务,以及大量文本档案,计划给用户提供一种对话式服务,方便用户基于他们的数据来…

张小明 2026/1/7 9:37:54 网站建设