Python中的游标与连接

Python中的游标与连接,python,python-3.x,cursor,oledbconnection,Python,Python 3.x,Cursor,Oledbconnection,在Python中,哪一个比其他的更有效。我的要求是只有一个连接,直到我们关闭应用程序 我有两个类,一个是建立和获取连接/游标,使用它我可以获取和获取服务中的数据。python中的以下MVC: 一个DBConnection类 import pyodbc class Connection: def getconnection(self): conn = pyodbc.connect('Driver={SQL Server};Server=.\SQLEXPRESS;Data

在Python中,哪一个比其他的更有效。我的要求是只有一个连接,直到我们关闭应用程序

我有两个类,一个是建立和获取连接/游标,使用它我可以获取和获取服务中的数据。python中的以下MVC:

一个DBConnection类

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
还有一个服务舱

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())
两个都给了我结果

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')),... ]
所以我的困惑是,应该使用哪一个?

在pyodbc中,connection.execute只是为了方便创建游标和执行游标.execute。文件中包括了这一点:

执行

此函数不是Python DB API的一部分

创建一个新的游标对象,调用其execute方法,并返回 新光标

num_products=cnxn.executeSELECT COUNT*FROM product

有关详细信息,请参见Cursor.execute。这是一种方便的方法 这不是DB API的一部分。因为新游标是由 每次调用时,如果有多个SQL语句,则不应使用此选项 需要在连接上执行

如果有疑问,请使用Cursor.execute

在pyodbc中,connection.execute只是创建游标和执行游标.execute的一种方便。文件中包括了这一点:

执行

此函数不是Python DB API的一部分

创建一个新的游标对象,调用其execute方法,并返回 新光标

num_products=cnxn.executeSELECT COUNT*FROM product

有关详细信息,请参见Cursor.execute。这是一种方便的方法 这不是DB API的一部分。因为新游标是由 每次调用时,如果有多个SQL语句,则不应使用此选项 需要在连接上执行

如果有疑问,请使用Cursor.execute

根据,允许使用多个游标,但并非所有数据库都允许。如果数据库支持,connection.execute将与cursor.execute不同。As connection.execute将执行与其关联的所有游标,但cursor.execute将执行相应的游标。根据,允许多个游标,但并非所有数据库都允许。如果数据库支持,connection.execute将与cursor.execute不同。As connection.execute将执行与其关联的所有游标,但是cursor.execute将执行相应的游标,而不是所有游标。