title: Cursor Vs Connection in Python
body: <p>Which one is more efficient than others in Python. My requirement is to have one connection until we close the application. </p>
  
  <p>I have two classes one is to make and get connection/cursor and using which I am able to get and fetch the data in my Service. Following MVC in python :)</p>
  
  <p>One DBConnection class</p>
  
  <pre><code>import pyodbc
  
  class Connection:
      def getconnection(self):
          conn =  pyodbc.connect('Driver={SQL Server};Server=.\SQLEXPRESS;Database=School;Trusted_Connection=yes;')
          print("Connection Established")
          #cursor = conn.cursor()
          return conn
  
      def getcursor(self):
          conn = pyodbc.connect('Driver={SQL Server};Server=.\SQLEXPRESS;Database=School;Trusted_Connection=yes;')
          print("Connection Established")
          cursor = conn.cursor()
          return cursor
  </code></pre>
  
  <p>and one Service Class</p>
  
  <pre><code>import Connection
  import pyodbc
  
  class StudentDataService:
  
      connection = Connection.Connection().getconnection()
      cursor = Connection.Connection().getcursor()
  
      def getstudentdata(self):
          print("In method getStudentdata()")
          try:
              row = self.connection.execute('select * from StudentGrade')
              studentList = list(row)
              return studentList
          except pyodbc.DatabaseError as err:
              print("Error Occurred while fetching Student Records", err)
              return None
          finally:
              self.connection.close()
  
      def getcursorstudentdata(self):
          print("In method getcursorstudentdata()")
          try:
              row = self.cursor.execute('select * from StudentGrade')
              studentList = list(row)
              return studentList
          except pyodbc.DatabaseError as err:
              print("Error Occurred while fetching Student Records", err)
              return None
          finally:
              self.cursor.close()
  
  
  stu = StudentDataService()
  print(stu.getstudentdata())
  print("++++++++++++++++++++++++++++++++")
  print(stu.getcursorstudentdata())
  </code></pre>
  
  <p>And both are giving me results</p>
  
  <pre><code>Connection Established
  Connection Established
  In method getStudentdata()
  [(1, 2021, 2, Decimal('4.00')), (2, 2030, 2, Decimal('3.50')),... ]
  ++++++++++++++++++++++++++++++++
  In method getcursorstudentdata()
  [(1, 2021, 2, Decimal('4.00')), (2, 2030, 2, Decimal('3.50')),... ]
  </code></pre>
  
  <p>So my confusion is, which one to use?</p>