Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2023 10:22:49

NanKol
Зарегистрирован: 2023-12-05
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Подключение к бд и close()

Привет всем. Ответьте, пожалуйста, глупому человеку.
У нас есть существующее соединение к удалённой бд(mysql) посредством pymysql. Что произойдёт, если мы завершим выполнение программы предварительно закрыв соединение, но без доступа в интернет? Останется ли дальше существовать соединение в mysql, как когда мы просто завершаем выполнение программы не закрыв соединение?

Офлайн

#2 Дек. 5, 2023 11:30:37

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Подключение к бд и close()

В Mysql как и других базах есть менеджер соединений
Он обнаружит что соединение потеряно и очистит его

Закрывать соединения нужно в циклических обработках
Если вы неправильно написали код то к примеру для каждой вставки данных будете открывать новое соединение - через какоетовремя ресурсы где крутится бд исчерпаются и всех пошлет нафиг

Тут нужно понимать что и как вы вставляете возможно вам пригодится pool
Ну а закрывать курсор - дело нужно инача рискуете потерять данные в процессе



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Дек. 6, 2023 00:21:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9861
Репутация: +  853  -
Профиль   Отправить e-mail  

Подключение к бд и close()

NanKol
Что произойдёт, если мы завершим выполнение программы предварительно закрыв соединение, но без доступа в интернет?
Ничего не понял. Ты собрался отключаться от базы данных без закрытия курсора и без коммита транзакции? Ну потеряешь данные, которые ты там якобы поназаписывал в базу. Они просто не запишутся в базу. Соединение будет висеть ещё какое-то время, потом СУБД обнаружит, что оно дохлое и очистит его и закроет. В процессе этого есть малая вероятность, что кто-то с твоими данными подключится к базе данных и она будет думать, что это ты продолжаешь с ней работать. Вообще, там надо протокол прочитать. В них обычно более подробно всё указано и формально описано. Но поймёшь ли ты эти описания?

Вот он описан у них на сайте
https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_PROTOCOL.html

Так что общее правило: всё закрывай в том же (в обратном) порядке, в котором открывал, и отключайся в том же (в обратном) порядке, в котором подключался.

Пример (на псевдокоде)
open connection
connect to database
open database cursor

make database operations
commit database transaction

close database cursor
disconnect from database
close connection



Отредактировано py.user.next (Дек. 6, 2023 00:24:05)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version