SqlAlchemy, почему движок создает больше соединений, чем «разрешено» ⇐ Python
SqlAlchemy, почему движок создает больше соединений, чем «разрешено»
Ситуация
Я переношу некоторый код из pyodbc в SqlAlchemy. Я заметил, что во время некоторых тестов я получаю больше активных соединений, чем раньше. Старый код pyodbc поддерживает не более двух соединений, а новый SqlAlchemy достигает 7.
Чтобы проверить соединения, я просто запускаю запрос из базы данных с помощью SSMS во время выполнения тестов. Я использую pyodbc==5.0.1 и SQLAlchemy==2.0.23
Цель
Я хочу, чтобы количество подключений было не более 5. Я пробовал возиться с poolclass=NullPool, pool_size, max_overflow, pool_recycle, pool_timeout и т. д., но ничего не работает. Как всегда ограничивать количество подключений ниже определенного значения?
Вот приблизительный пример моего кода на Python
импортировать панд как pd импортировать sqlalchemy как sa Connection_url = sa.engine.URL.create("mssql+pyodbc", query={"odbc_connect": "Driver={ODBC Driver 17..."}) двигатель = sa.create_engine( URL_соединения, fast_executemany = fast_executemany, # пулкласс=NullPool # это Pool_size=1, # или это max_overflow=2 # и это ни на что не влияет ) защита get_connection(): глобальный двигатель вернуть двигатель.connect() Защиту sql_query (запрос, параметры): соединение = get_connection() res = pd.read_sql_query(запрос, соединение, параметры=параметры) соединение.закрыть() защита some_test_mock(): рез = sql_query("1") рез = sql_query("2") рез = sql_query("3") для меня в диапазоне (2): для j в диапазоне (2): res = sql_query(f"{i} {j}") рез = sql_query("4") Запрос для проверки соединений:
ВЫБРАТЬ DB_NAME(dbid) как DBName, COUNT(dbid) как NumberOfConnections, логин как LoginName ОТ sys.sysprocesses с (nolock) ГДЕ дбид > 0 и эцид=0 и имя пользователя = 'testsqluser' ГРУППА ПО dbid, имя пользователя --количество подключений увеличивается с 1,2,3 до 7
Ситуация
Я переношу некоторый код из pyodbc в SqlAlchemy. Я заметил, что во время некоторых тестов я получаю больше активных соединений, чем раньше. Старый код pyodbc поддерживает не более двух соединений, а новый SqlAlchemy достигает 7.
Чтобы проверить соединения, я просто запускаю запрос из базы данных с помощью SSMS во время выполнения тестов. Я использую pyodbc==5.0.1 и SQLAlchemy==2.0.23
Цель
Я хочу, чтобы количество подключений было не более 5. Я пробовал возиться с poolclass=NullPool, pool_size, max_overflow, pool_recycle, pool_timeout и т. д., но ничего не работает. Как всегда ограничивать количество подключений ниже определенного значения?
Вот приблизительный пример моего кода на Python
импортировать панд как pd импортировать sqlalchemy как sa Connection_url = sa.engine.URL.create("mssql+pyodbc", query={"odbc_connect": "Driver={ODBC Driver 17..."}) двигатель = sa.create_engine( URL_соединения, fast_executemany = fast_executemany, # пулкласс=NullPool # это Pool_size=1, # или это max_overflow=2 # и это ни на что не влияет ) защита get_connection(): глобальный двигатель вернуть двигатель.connect() Защиту sql_query (запрос, параметры): соединение = get_connection() res = pd.read_sql_query(запрос, соединение, параметры=параметры) соединение.закрыть() защита some_test_mock(): рез = sql_query("1") рез = sql_query("2") рез = sql_query("3") для меня в диапазоне (2): для j в диапазоне (2): res = sql_query(f"{i} {j}") рез = sql_query("4") Запрос для проверки соединений:
ВЫБРАТЬ DB_NAME(dbid) как DBName, COUNT(dbid) как NumberOfConnections, логин как LoginName ОТ sys.sysprocesses с (nolock) ГДЕ дбид > 0 и эцид=0 и имя пользователя = 'testsqluser' ГРУППА ПО dbid, имя пользователя --количество подключений увеличивается с 1,2,3 до 7
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение