Я использовал Python 3 contextmanager для управления закрытием MySQL-соединения (),
для простоты я написал простой пример:
from sqlalchemy import create_engine
from contextlib import contextmanager
@contextmanager
def db_connect():
DSNs= {'mysql': 'mysql+pymysql://***?charset=utf8'}
try:
engine = create_engine(DSNs['mysql'], pool_recycle=1)
except ImportError:
raise RuntimeError()
conn = engine.connect()
try:
yield conn
finally:
if conn:
print(threading.currentThread().getName() + " why closed")
conn.close()
if __name__ == '__main__':
with db_connect() as conn:
for i in range(0, 100):
sql = """select {0}""".format(i)
with conn as cur:
cur.execute(sql)
Я обнаружил, что могу успешно выполнить запрос один раз, когда я запускаю запрос еще раз, у меня появляется ошибка "соединение уже закрыто"
Traceback (most recent call last): ... in _execute_context
conn = self._revalidate_connection()
base.py", line 469, in _revalidate_connection
raise exc.ResourceClosedError("This Connection is closed")
sqlalchemy.exc.ResourceClosedError: This Connection is closed
The above exception was the direct cause of the following exception: