Функция подключения к базе данных для Python - PullRequest
0 голосов
/ 24 апреля 2019

Я написал функцию для подключения к базе данных с помощью pymysql. Вот мой код:

def SQLreadrep(sql):
    connection=pymysql.connect(host=############,
                               user=#######,
                               password=########,
                               db=#########)
    with connection.cursor() as cursor:
            cursor.execute(sql)
            rows=cursor.fetchall()
    connection.commit()
    connection.close()
    return rows

Я передаю SQL в эту функцию и возвращаю строки. Тем не менее, я делаю быстрые запросы к базе данных. (Что-то вроде "SELECT sku WHERE object='2J4423K').

  1. Как можно избежать такого количества соединений?
  2. Должен ли я избегать такого количества соединений для начала?
  3. Могу ли я аварийно завершить работу сервера, используя такое количество соединений и запросов?

1 Ответ

1 голос
/ 24 апреля 2019

Позвольте мне сначала ответить на ваш последний вопрос.Ваша функция устанавливает соединение, но закрывает его перед возвратом.Итак, я не вижу причин, по которым, если бы вы не использовали многопоточность или многопроцессорность, вы бы никогда не использовали более одного соединения за раз, и вам не пришлось бы сбивать сервер.

Способ избежать накладных расходов на создание и закрытиетак много соединений будет "кэшировать" соединение.Один из способов сделать это - заменить вашу функцию классом:

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 будет очищен, соединение будет автоматически закрыто.

...