Закрыть соединение с базой данных после завершения запроса - PullRequest
0 голосов
/ 03 февраля 2020

Итак, в общем-то, сегодня кто-то говорил мне, что способ, которым я запрашиваю свою базу данных, был плох, прежде чем я никогда не закрывал соединение после завершения, и, таким образом, у меня, вероятно, было много открытых соединений с базой данных, запущенных одновременно.

I однако посмотрел в Интернете, я не получил прямой ответ. Я использую MySQL Mariadb. и вот как я это делаю

db = mysql.connector.connect(host='localhost', username, passwd, db='mydb') 

# and actually call this function and pass query
def db_execute(query):
    cursor = db.cursor()
    cursor.execute(query)
    db.commit()

это прилично? как я могу закрыть соединение после того, как я закончу sh? что лучше?

Ответы [ 3 ]

1 голос
/ 03 февраля 2020
Блок

    db = mysql.connector.connect(host='localhost', username, passwd, db='mydb') 

    # and actually call this function and pass query
    def db_execute(query):
        cursor = db.cursor()
        try:   
           cursor.execute(query)
           db.commit()
        #You can also catch any exceptions you are interested in here
        finally:
           cursor.close()
           db.close()

Finally выполняется, даже если ваш код вызывает исключение, следовательно, ваше соединение всегда закрывается, даже если происходит что-то непредвиденное. Если вы не используете finally, и в вашем коде есть исключение перед оператором close, соединение остается открытым, что нежелательно.

0 голосов
/ 09 февраля 2020

Оперативно закройте что-нибудь внутри базы данных. Это относится к «курсорам», «транзакциям» и т. Д. c.

. Что касается disconnect() (как оно пишется), то правила другие.

  • Do не делать соединение-разъединение вокруг каждого оператора SQL; это ужасно неэффективно.
  • В веб-приложении do подключаются на ранней стадии "веб-страницы" и либо отключаются по завершении, либо позволяют содержащемуся коду (PHP, et c) иметь дело с закрытием, когда оно уходит. Веб-страницы недолговечны и не могут оставлять «состояние» для следующей страницы, когда пользователь щелкает ссылку.
  • В долго работающем приложении следует помнить, что через некоторое время (настраиваемое) не трогать база данных, соединение с базой данных будет закрыто. Если вы попытаетесь сделать SQL, вы получите какую-то форму ошибки. Для таких редких приложений может потребоваться подключение + отключение более одного раза. И вы также можете делать их в удобное для приложения время.

Как правило, наличие большого количества незанятых соединений не является "проблемой". Однако, если оно превышает max_connections, новички получат сообщение об ошибке «невозможно подключиться».

«Пул соединений» добавляет еще одно измерение в это обсуждение. Я не буду go там.

0 голосов
/ 03 февраля 2020

cursor.close(), а затем db.close()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...