使用python 创建sql server 连接池类
时间: 2023-09-17 20:12:13 浏览: 221
连接池python
下面是一个使用Python创建SQL Server连接池的示例代码:
```python
import pyodbc
from queue import Queue
from threading import Lock
class SQLServerConnectionPool:
def __init__(self, server, database, username, password, max_connections=5):
self.server = server
self.database = database
self.username = username
self.password = password
self.max_connections = max_connections
self.connection_queue = Queue(maxsize=max_connections)
self.lock = Lock()
self._create_connections(max_connections)
def _create_connections(self, max_connections):
for i in range(max_connections):
connection = pyodbc.connect(f"Driver={{SQL Server}};Server={self.server};Database={self.database};UID={self.username};PWD={self.password}")
self.connection_queue.put(connection)
def get_connection(self):
connection = self.connection_queue.get()
return connection
def release_connection(self, connection):
self.connection_queue.put(connection)
def close_all_connections(self):
with self.lock:
while not self.connection_queue.empty():
connection = self.connection_queue.get()
connection.close()
```
这个类的构造函数接收SQL Server的服务器名、数据库名、用户名和密码,以及最大连接数。它使用Python标准库中的队列(Queue)来存储连接,并使用锁(Lock)来确保线程安全。在初始化时,它创建max_connections个连接,并将它们放入队列中。当需要连接时,可以使用get_connection方法从队列中获取连接;使用release_connection方法将连接释放回队列中。最后,使用close_all_connections方法可以关闭所有连接并清空队列。
使用此类的示例代码:
```python
pool = SQLServerConnectionPool(server='localhost', database='test', username='sa', password='password', max_connections=2)
def query_database():
connection = pool.get_connection()
cursor = connection.cursor()
cursor.execute('SELECT * FROM test_table')
rows = cursor.fetchall()
pool.release_connection(connection)
return rows
for i in range(4):
print(query_database())
pool.close_all_connections()
```
在这个示例中,我们创建了一个连接池,最大连接数为2。我们定义了一个query_database函数,它从连接池中获取连接,执行SQL查询,然后释放连接。我们使用循环4次调用此函数,以测试连接池的行为。最后,我们使用close_all_connections方法关闭所有连接。
阅读全文