Вопросы Незнайки по программированию на Python (вопрос 1)
Разъясните сущность получения соединения с базой и курсора и что происходит в неожиданных ситуациях.
Товарищи, прошу не уничтожать сильно за описанные вопросы. Я просто учусь. Искренне надеюсь на помощь сообщества и некоторое наставничество.
По результатам данного вопроса и предложенным вами материалам к прочтению, обязуюсь разобраться основательно и выпустить по этому поводу пост для тех, кто задумается о том же.
Возможно, ответы на ои вопросы есть в документации или являются базовыми, однако, я не нашёл ответов или плохо искал.
Речь пойдёт про работу с базой данных PostgreSQL в приложении на Python.
Итак. Из базовых описаний процесса работы мы знаем, что при работе с БД требуется провести простой объём операций, в частности:
# Создать объект "соединение"
conn = psycopg2.connect(паратметры)
# Получить курсор по этому соединению
cursor = conn.cursor()
# Формируем какой-то запрос
cursor .execute("Запрос на вставку данных в базу")
# Отправляем данные в базу
conn .commit()
# Закрываем соединение
conn .close()
Кажется всё просто. Но есть ряд вопросов.
А что, собственно, собой представляет объект conn? Имеется ввиду, что происходит на стороне базы, когда запрашивается соединение? Производится какая-то запись куда-то? Как это выглядит?
Почему объект conn нельзя десериализовать, чтобы передавать его между процессами в мультипроцессинге?
А что если твоё приложение и функция, которая открыла соединение упала, не закрыв соединение, что происходит с соединением на стороне базы?
А если твой код выглядит примерно так (ниже). Т.е. в бесконечном цикле в отдельном процессе выполняется функция, тогда как закрывать соединение? Когда? А что будет, если программа вылетит?
def функция(параметры):
conn = psycopg2.connect(паратметры)
cursor = conn.cursor()
while True:
cursor .execute(запрос)
conn.commit()
time.sleep(2)
if __name__ == "__main__":
mp_take_proxy_us_proxy_org = mp.Process(target=Фнукция, kwargs={параметры}, )
Вот пока вроде и весь пул вопросов. Подскажите, пожалуйста.