разница между объектами 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 - это итератор над результирующим набором из запроса. Закройте их, когда закончите с этим результирующим набором.