Я смущен тем, почему python нужен объект курсора. Я знаю jdbc, и там подключение к базе данных довольно интуитивно понятно, но в python меня смущает объект курсора. Также я сомневаюсь в том, в чем разница между функциями cursor.close() и connection.close() с точки зрения освобождения ресурсов.
разница между объектами курсора и соединения
Ответы (3)
Парадигма курсора не специфична для Python, но часто используется в базах данных.
В зависимости от базовой реализации может быть возможно создать несколько курсоров, использующих одно и то же соединение с базой данных. Закрытие курсора должно освободить ресурсы, связанные с запросом, включая любые результаты, которые никогда не извлекались из БД (или извлекались, но не использовались), но не устраняло соединение с самой базой данных, поэтому вы могли бы получить новый курсор в той же базе данных. без необходимости повторной аутентификации.
Как упоминают другие, Connection()
- это сетевое соединение с базой данных, и единственное его реальное использование - возвращать курсоры. PEP-249, где указан DBApi 2.0, не определяет четко, что именно соединение или курсор, а также то, что должен делать метод close()
для каждого из них; только <module>.connect()
должен возвращать экземпляр <module>.Connection
, <module>.Connection.cursor()
должен возвращать экземпляр <module>.Cursor
, а <module>.Cursor.execute()
должен вызывать предоставленный оператор и возвращать результирующие строки. В частности, он не определяет <module>.Connection.execute()
, хотя некоторые реализации могут свободно реализовывать их как расширения.
Однако полагаться на эти расширения, вероятно, неразумно, поскольку это означает, что у вас не будет переносимого кода. DBApi выдвигает это двухуровневое требование, потому что в некоторых базах данных может быть сложно выполнить соединение без промежуточного объекта.
Объект соединения — это ваше соединение с базой данных, закройте его, когда закончите общение с базой данных. Объект Cursor — это итератор по набору результатов запроса. Закройте их, когда закончите с этим набором результатов.