Я использую пакет DBUtils с их классом PooledDB для управления соединениями с моей базой данных в отдельном модуле.
Код itselfe работает, как и ожидалось, но я совершенно не уверен, является ли мой тип использования правильным или оптимальным.
Итак, мои вопросы: 1. Поскольку PooledDB открывает несколько соединений в один раз, хорошо ли это вызывать в самом init или я должен вызывать его непосредственно перед выбором и так далее? 2. Есть ли хорошие уроки о том, как использовать PooledDB? Я не нашел ни одного хорошего!
Мой код выглядит так (сокращенно):
Модуль пула БД:
import pyodbc
from DBUtils.PooledDB import PooledDB
class Database:
def __init__(self):
self.server = "..."
self.driver = '{ODBC Driver 13 for SQL Server}'
self.port = 1433
self.database = '...'
self.username = '...'
self.password = '...!'
self._CreatePool()
def _CreatePool(self):
self.Pool = PooledDB(creator=pyodbc, mincached=2, maxcached=5, maxshared=3,
maxconnections=6, blocking=True, DRIVER=self.driver,
SERVER=self.server, PORT=self.port, DATABASE=self.database,
UID=self.username, PWD=self.password)
def _Getconnect(self):
self.conn = self.Pool.connection()
cur = self.conn.cursor()
if not cur:
raise "connection error"
else:
return cur
def ExecQuery(self, sql, addition=""):
cur = self._Getconnect()
if addition != "":
cur.execute(sql, addition)
else:
cur.execute(sql)
relist = cur.fetchall()
cur.close()
self.conn.close()
return relist
А в других моих модулях, в основном GUI с wx Python, я называю это так:
class PanelTest(scrolled.ScrolledPanel):
def __init__(self, parent):
self.ms = ERP_DB_Pool.Database()