Я смущен тем, почему python нужен объект курсора. Я знаю jdbc, и там соединение с базой данных довольно интуитивно, но в python меня путают с объектом курсора. Также я сомневаюсь в том, какая разница между функцией cursor.close() и connection.close() с точки зрения выпуска ресурсов.разница между курсором и объектами связи
ответ
Парадигма курсора не специфична для Python, но является частой структурой данных в databases themselves.
В зависимости от базовой реализации может быть создано несколько курсоров, которые используют одно и то же соединение с базой данных. Закрытие курсора должно освобождать ресурсы, связанные с запросом, включая любые результаты, никогда не извлекаемые из БД (или извлеченные, но не используемые), но не исключающие соединение с самой базой данных, чтобы вы могли получить новый курсор в той же базе данных без необходимости повторной аутентификации.
Объект подключения - это ваше соединение с базой данных, закройте это, когда вы закончите разговор с базой данных. Объект курсора является итератором по набору результатов из запроса. Закройте их, когда закончите с этим набором результатов.
Я сомневаюсь, что это итератор, потому что есть команда execute (sql_string), которая выполняет строку sql. Для любого итератора для набора результатов не имеет смысла иметь такую функцию. –
Вы правы, но курсор - это не только структура на клиенте, но и на сервере. Он помогает использовать подготовленные операторы SQL, выполнять их и после их выполнения перебирать результаты. – Toote
Как упоминают другие, Connection()
- это сетевое подключение к базе данных, и только реальное использование - возврат курсоров. PEP-249, где указан DBApi 2.0, четко не определено, что именно представляет собой соединение или курсор, а также то, что должен делать метод close()
; только что <module>.connect()
должен возвращать экземпляр <module>.Connection
, что <module>.Connection.cursor()
должен вернуть экземпляр <module>.Cursor
и <module>.Cursor.execute()
должны ссылаться на заявление при условии возврата и результирующие строки. В частности, он не определяет <module>.Connection.execute()
, хотя конкретные реализации могут реализовать их как расширения.
В зависимости от этих расширений, вероятно, неразумно, поскольку это означает, что у вас не будет переносного кода. DBApi делает это двухуровневое требование, потому что выполнение некоторых операций над соединением без промежуточного объекта может быть затруднено в некоторых базах данных.
- 1. Проектирование связи между объектами
- 2. Разница между взаимозаменяемыми объектами и неизменяемыми объектами
- 3. В PL/SQL какая разница между курсором и ссылочным курсором?
- 4. Разница между объектами и Runnable
- 5. Разница между списком и матрицей-курсором (Android)
- 6. разница между курсором и выбрать в цикле
- 7. Разница между указателями-событиями и курсором
- 8. Установление правильной связи между объектами
- 9. Разница между классами, объектами и экземплярами
- 10. Разница между ls() и объектами() в R
- 11. Разница между POCO и объектами самоотслеживания
- 12. Разница между объектами flash и flex?
- 13. Разница между объектами и классом Entity?
- 14. разница между обычными объектами и струнным
- 15. разница Three.js между «объектами» и «элементы»
- 16. Разница между объектами и статическими методами
- 17. DDD: в чем разница между объектами и объектами ценности?
- 18. jvisualvm разница между живыми объектами и выделенными объектами
- 19. Разница между объектами ссылочного типа JavaScript и обычными объектами
- 20. В чем разница между объектами jquery и объектами javascript?
- 21. Разница между объектами в массиве
- 22. Разница между двумя объектами времени
- 23. Разница в связи между C и C++?
- 24. Разница между ActiveRecord и ActiveRecord :: Объекты связи
- 25. Разница между ссылкой и функцией связи
- 26. Разница между последовательностью и схемой связи (UML)
- 27. Предложение для гибкой связи между объектами
- 28. Тестирование связи между яркими объектами (Laravel 4)
- 29. Поиск связи между объектами в большом списке
- 30. Связи ресурсов FHIR между объектами в памяти
У нас есть два курсора одновременно. Если да, то упоминайте о проблемах параллелизма –
все эти детали скрыты в «в зависимости от базовой реализации». Вам нужно будет прочитать документацию соответствующего драйвера DB – Toote
Согласно википедии: «В информатике курсор базы данных - это структура управления, которая позволяет обходить записи в базе данных. Курсоры облегчают последующую обработку в сочетании с обходом, таких как извлечение, добавление и удаление записей базы данных ». То, как Python реализует курсоры, не соответствует этому описанию - если бы они были просто итераторами, они не отвечали бы за выполнение SQL-инструкций. Разве это не что-то специфическое для python? И что-то, что заслуживает объяснения? – skyking