我使用SQLAlchemy(仅限Core,而不是ORM)来创建与SQL Server 2008 SP3的连接。
在查看流程时'网络连接,我注意到SQL Server(端口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
之后我添加了NullPool
和engine.dispose()
,认为他们可以解决这种挥之不去的联系,但是唉。
我使用基于主机名的连接作为指定的here。
版本:
编辑:我已经重写了我的代码,只使用pyODBC而不是SQLAlchemy + pyODBC,问题仍然存在。因此,据我所知,问题是由pyODBC保持连接打开引起的。
答案 0 :(得分:0)
当只有pyODBC时,问题是因为所讨论的documentation的连接池。
如here:
中所述汇集
一个布尔值,指示是否启用连接池。 这是一个全局(HENV)设置,所以它只能在之前修改 第一次连接。默认值为True,它启用ODBC 连接池。
因此:
ws2.lib(WS2.dll) : fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM'
似乎在使用SQLAlchemy并使用import pyodbc
pyodbc.pooling = False
conn = pyodbc.connect(db_connection_string)
conn.close()
禁用SA池时,这不会传递给pyODBC。