Я создаю соединение с базой данных в методе класса __init__
класса Python и хочу убедиться, что соединение закрыто при уничтожении объекта.
Похоже, я могу сделать это в __del__()
или сделать класс менеджером контекста и закрыть соединение в __exit__()
. Интересно, какой из них более Pythonic.Каков предпочтительный способ закрыть соединение psycopg2, используемое объектом Python?
1
A
ответ
1
Похоже, что я могу сделать это в
__del__()
или сделать класс менеджер контекста и закрыть соединение в__exit__()
. Интересно, какой из них более Pythonic.
Я не буду комментировать то, что больше «вещий», так что это весьма субъективный вопрос.
Однако Python не дает очень строгих гарантий при вызове деструктора, что делает контекст/__exit__
подходящим здесь.
Смежные вопросы
- 1. PostgreSQL + Python: Закрыть соединение
- 2. Каков предпочтительный способ обработки транзакций в pyscopg2?
- 3. Каков правильный способ закрыть TCP-соединение.
- 4. Каков предпочтительный способ обработки данных в Python?
- 5. psycopg2 с флягой, когда закрыть соединение
- 6. Каков предпочтительный способ прокрутки CSS?
- 7. Каков предпочтительный способ реализации hashCode()?
- 8. Каков предпочтительный способ отступов в коммутаторе?
- 9. Каков предпочтительный способ отображения номера версии модуля?
- 10. Каков предпочтительный способ написать мои демоны linux?
- 11. Каков предпочтительный способ составления набора из нескольких списков в Python
- 12. Каков предпочтительный способ реализации hook или callback в Python?
- 13. Каков наиболее предпочтительный способ обернуть C-код для Python?
- 14. Каков правильный способ закрыть H2?
- 15. Каков предпочтительный способ перечисления нескольких элементов?
- 16. Hibernate: Каков предпочтительный способ обновления объекта?
- 17. Каков предпочтительный способ инициализации представлений onCreate?
- 18. Каков предпочтительный способ объявить поток в java?
- 19. Каков предпочтительный способ создания строки из литерала?
- 20. Каков предпочтительный способ загрузки артефактов в Artifactory?
- 21. Каков предпочтительный способ архивирования функций с coredata?
- 22. Каков предпочтительный способ назначения коллекции из параметра?
- 23. Каков предпочтительный способ подстроки в языке D?
- 24. Каков предпочтительный способ написания масштабируемых многострочных макетов?
- 25. Каков предпочтительный способ создания пузырьков событий?
- 26. Каков предпочтительный способ определения массива в мангусте?
- 27. Каков предпочтительный способ переназначения массивов NumPy?
- 28. Каков предпочтительный способ хранения различных версий данных?
- 29. Каков предпочтительный способ объединения функций Underscore.js?
- 30. Каков предпочтительный способ записи GTK-приложений?
Я также использую контекстных менеджеров для этого. Он работает хорошо, но для этого нужно было убедиться, что все мои соединения вызываются через диспетчер контекста, иначе вы их не освободите. Может быть, использовать \ __ exit__ ** и ** \ __ del__? Я этого не делал - написал код для проверки стека и создания исключения, если он не был вызовом менеджера контекста. –
просто не устанавливают соединение вне метода '__enter__'. Задача решена. –
ах, ах. умная. Я посмотрю, если я реорганизую свой код, чтобы сделать это. В противном случае да, контекстные менеджеры классные. Ах, еще одна вещь, они накладывают определенные ограничения на жизненные циклы экземпляра - мои подключения начинаются с представлений django и заканчиваются при отправке ответа. Мне пришлось реорганизовать другие классы, которые, как правило, поддерживали соединения db и вместо этого передавали соединение в качестве параметров для своих методов. –