SQLAlchemy / pyODBC 不释放数据库连接

SQLAlchemy / pyODBC not releasing database connection

我正在使用 SQLAlchemy(仅​​核心,不是 ORM)创建到 SQL Server 2008 SP3 的连接。

在查看进程的网络连接时,我注意到与 SQL 服务器(端口 1433)的 TCP/IP 连接保持打开状态(ESTABLISHED)。

示例代码:

from urllib.parse import quote_plus
from sqlalchemy.pool import NullPool
import sqlalchemy as sa

# parameters are read from a config file
db_params = quote_plus(';'.join(['{}={}'.format(key, val) for key, val in db_config.items()]))
# Hostname based connection
engine = sa.create_engine('mssql:///?odbc_connect={}'.format(db_params), 
                          poolclass=NullPool)

conn = engine.connect()
conn.close()

engine.dispose()
engine = None

我后来加了NullPoolengine.dispose(),以为这样可以解决挥之不去的联系,可惜

我正在使用指定的基于主机名的连接 here

版本:


编辑:我重写了代码以仅使用 pyODBC 而不是 SQLAlchemy + pyODBC,问题仍然存在。据我所知,问题是由 pyODBC 保持连接打开引起的。

当只有 pyODBC 时,问题 是因为 here 所讨论的连接池。

docs所述:

pooling

A Boolean indicating whether connection pooling is enabled. This is a global (HENV) setting, so it can only be modified before the first connection is made. The default is True, which enables ODBC connection pooling.

因此:

import pyodbc

pyodbc.pooling = False 
conn = pyodbc.connect(db_connection_string) 
conn.close()

似乎在使用 SQLAlchemy 并使用 NullPool 禁用 SA 池时,这不会传递给 pyODBC。