You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多个Python SQL脚本中跨文件复用数据库连接池

Python跨脚本复用数据库连接池的实现方案

问题描述

我用Python脚本创建数据库连接执行SQL时,发现创建连接的耗时远超过SQL执行的耗时。因此想创建一个数据库连接池对象,在多个执行SQL的Python脚本中复用它。有没有人有相关实践经验?求具体实现方式。

已尝试操作与报错

连接池创建脚本(dc_connection_pool.py)

import sqlalchemy.pool as pool
import jaydebeapi
import datetime


if __name__ == "__main__":
    conn = jaydebeapi.connect("<<host>>:<<port>>",
                              {'user': "user-id",
                               'password': "pw"
                               },
                              "<<jdbc>>.jar")

    mypool = pool.QueuePool(conn, max_overflow=10, pool_size=5, reset_on_return=False)

    while True:
        continue

其他脚本调用尝试

from dc_connection_pool import mypool

报错信息

NameError: name 'mypool' is not defined

问题原因与解决方法

报错根源

你的mypool是定义在if __name__ == "__main__":代码块内的,这个代码块只有直接运行dc_connection_pool.py时才会执行。当其他脚本导入该模块时,这段初始化代码不会触发,自然找不到mypool变量,导致报错。

另外还有个核心问题:QueuePool的第一个参数应该是创建连接的函数,而不是已经创建好的单个连接。你当前的写法会把同一个连接放进池里,多个请求共用同一连接,完全违背了连接池的设计逻辑。

修正后的连接池实现

修改dc_connection_pool.py,将连接池初始化放在模块级别,并传入创建连接的函数:

import sqlalchemy.pool as pool
import jaydebeapi

# 定义创建单个数据库连接的函数
def create_db_connection():
    return jaydebeapi.connect(
        "<<host>>:<<port>>",
        {'user': "user-id", 'password': "pw"},
        "<<jdbc>>.jar"
    )

# 模块级别初始化连接池,导入时自动创建
mypool = pool.QueuePool(
    create_db_connection,
    max_overflow=10,  # 超出池常驻大小的临时连接上限
    pool_size=5,      # 池保持的常驻连接数量
    reset_on_return=False
)

其他脚本复用连接池的方式

现在其他脚本可以直接导入并使用连接池:

from dc_connection_pool import mypool

# 获取连接执行SQL示例
with mypool.connect() as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM your_target_table")
    query_results = cursor.fetchall()
    # 在这里处理查询结果
    cursor.close()

注意事项

  • 不要将连接池初始化放在if __name__ == "__main__"内,否则模块导入时不会执行初始化逻辑。
  • 根据数据库类型和JDBC驱动的要求,调整create_db_connection函数的参数,确保连接能正常创建。
  • 根据业务并发量调整pool_size和max_overflow的值,避免连接数过多导致数据库负载过高。

内容的提问来源于stack exchange,提问作者Praveen Badam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:50:19