Не стоит создавать новое соединение с Azure SQL каждый раз, когда вы CRUD. Это пустая трата ресурсов, и когда количество обращений достигнет определенного числа, это будет иметь большое влияние на производительность ms sql.
. Я предлагаю вам использовать пул соединений с базой данных. Диспетчер пула инициализирует несколько соединений с SQL экземпляром сервера, а затем повторно использует эти соединения по запросу.
Существует пакет, которым вы можете воспользоваться. Это DBUtils . Вы можете использовать PoolDB
из него вместе с pyodbc
.
Пример для демонстрации работы пула соединений с базой данных:
import pyodbc
from DBUtils.PooledDB import PooledDB
class Database:
def __init__(self, server, driver, port, database, username, password):
self.server = server
self.driver = driver
self.port = port
self.database = database
self.username = username
self.password = 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
# query sql
def ExecQuery(self, sql):
cur = self._Getconnect()
cur.execute(sql)
relist = cur.fetchall()
cur.close()
self.conn.close()
return relist
# non-query sql
def ExecNoQuery(self, sql):
cur = self._Getconnect()
cur.execute(sql)
self.conn.commit()
cur.close()
self.conn.close()
def main():
server = 'jackdemo.database.windows.net'
database = 'jackdemo'
username = 'jack'
port=1433
password = '*********'
driver= '{ODBC Driver 17 for SQL Server}'
ms = Database(server=server, driver=driver, port=port, database=database, username=username, password=password)
resList = ms.ExecQuery("select * from Users")
print(resList)
if __name__ == '__main__':
main()
Ответы на ваши вопросы:
Q1: Какая библиотека лучше всего подходит для подключения Azure через Python? Я нашел pyodb c и pyms sql, но я думаю, что оба должны иметь дополнительный драйвер? Это правда, и это проблема в реальных случаях использования?
Ответ: Тогда оба будут в порядке. ODB C означает Open Database Connectivity
, поэтому его можно использовать для подключения многих баз данных. Я вижу, что в руководстве Microsoft используется pyodbc
, поэтому, возможно, это лучший выбор.
Q2: У меня много модулей, таких как Manage_Customer.py, Manage_Factory.py и так далее. Во всех них я подключаюсь к своей базе данных. У меня нет модуля, похожего на SQL Master, который обрабатывает некоторые накладные расходы.
Ответ: Используйте пул соединений с базой данных.
Q3: После чтения в SQL Мне не нужно закрывать БД каким-либо образом?
Ответ: Если вы используете пул соединений с базой данных, то соединение будет также возвращено к пулу после вызова метода close ().