2017-09-16 16 views
1

파이썬에서 다른 것보다 효율적입니다. 내 요구 사항은 응용 프로그램을 종료 할 때까지 하나의 연결을 갖는 것입니다.파이썬에서의 커서 대 연결

나는 두 개의 클래스를 하나씩 만들어서 연결/커서를 사용하고 내 서비스에서 데이터를 가져와 가져올 수 있습니다. 그래서 내 혼란,

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')),... ] 

입니다

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 

하나의 서비스 클래스를 파이썬 :

한 DBConnection 클래스에

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()) 

을 MVC에 따라 그리고 모두가 나에게주는 것은 어떤 결과 하나?

답변

3

pyodbc에서 connection.execute은 커서를 만들고 cursor.execute을 수행하는 데 편리합니다. 이 기능은 파이썬 DB의 API의 일부가 아닌()

실행

https://github.com/mkleehammer/pyodbc/wiki/Connection#execute

: 이것은에서 문서에 덮여있다.

Cursor 객체를 만들고 execute 메서드를 호출 한 다음 새 커서를 반환합니다.

num_products = cnxn.execute("SELECT COUNT(*) FROM product")

은 자세한 내용은 Cursor.execute()를 참조하십시오. 이것은 DB API의 일부가 아닌 편리한 방법 입니다. 새로운 Cursor은 각 호출 에 의해 할당되므로 두 개 이상의 SQL 문 이 연결에서 실행되어야하는 경우에는이 옵션을 사용하면 안됩니다.

확실하지 않은 경우 Cursor.execute을 사용하십시오.