разница между объектами cursor и connection

Я смущен тем, почему python нужен объект курсора. Я знаю jdbc, и там соединение с базой данных довольно интуитивно, но в python я путаю с объектом курсора. Также я сомневаюсь в том, в чем разница между курсором.закрыть () и соединение.функция close () с точки зрения высвобождения ресурсов.

3 ответов


парадигма курсора не специфична для Python, но является частой структурой данных в сами базы данных.

в зависимости от базовой реализации может быть возможно создать несколько курсоров, использующих одно и то же соединение с базой данных. Закрытие курсора должно освободить ресурсы, связанные с запросом, включая любые результаты, которые никогда не извлекались из БД (или извлекались, но не использовались), но не устраняло бы соединение с самой базой данных, поэтому вы были бы возможность получить новый курсор в той же базе данных без необходимости повторной аутентификации.


как упоминают другие, a Connection() является сетевым подключением к базе данных, и это только реальное использование для возврата курсоров. PEP-249, где указан DBApi 2.0, четко не определяет, что такое соединение или курсор, и что такое close() метод на каждом должен делать; только это <module>.connect() должен вернуть экземпляр <module>.Connection , что <module>.Connection.cursor() должен вернуть экземпляр <module>.Cursor , и <module>.Cursor.execute() следует вызвать предоставленный оператор и вернуть результирующие строки. В частности, он не определяет <module>.Connection.execute() , хотя конкретные реализации могут свободно реализовывать их как расширения.

в зависимости от этих расширений, вероятно, неразумно, хотя, поскольку это означает, что у вас не будет портативного кода. DBApi делает это двухуровневое требование, потому что выполнение соединения без промежуточного объекта может быть затруднено в некоторых базах данных.


объект подключения - это ваше соединение с базой данных, закройте его, когда закончите говорить с базой данных все вместе. Объект Cursor - это итератор над результирующим набором из запроса. Закройте их, когда закончите с этим результирующим набором.