Позвольте мне сначала ответить на ваш последний вопрос.Ваша функция устанавливает соединение, но закрывает его перед возвратом.Итак, я не вижу причин, по которым, если бы вы не использовали многопоточность или многопроцессорность, вы бы никогда не использовали более одного соединения за раз, и вам не пришлось бы сбивать сервер.
Способ избежать накладных расходов на создание и закрытиетак много соединений будет "кэшировать" соединение.Один из способов сделать это - заменить вашу функцию классом:
import pymysql
class DB(object):
def __init__(self, datasource, db_user, db_password):
self.conn = pymysql.connect(db=datasource, user=db_user, password=db_password)
def __del__(self):
self.conn.close()
def query(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)
self.conn.commit()
return cursor.fetchall()
Затем вы создаете экземпляр экземпляра класса DB и вызываете его метод query ,Когда экземпляр DB будет очищен, соединение будет автоматически закрыто.