Python pyodbc获取速度较慢



我正在使用pyodbc从MSQL Server获取一些数据。工作正常,但在检索大量数据时除外:它确实很慢。

我有大约4000排,这不是一个很大的数字。

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.10;DATABASE=MyDB;Trusted_Connection=yes;')
cur = conn.cursor()
cur.execute('SELECT * FROM myTable')

我尝试了以下方法:

time1 = datetime.datetime.now()
a = cur.fetchall()
time2 = datetime.datetime.now()
print time2 - time1
print len(a)

0:00:27.286000

time1 = datetime.datetime.now()
for i in range(0, 4017):
    cur.fetchone()
time2 = datetime.datetime.now()
print time2 - time1

0:00:21.196000

time1 = datetime.datetime.now()
allIDRows = list(cur.fetchmany(4017))
time2 = datetime.datetime.now()
print time2 - time1

0:00:23.845000

time1 = datetime.datetime.now()
a = cur.fetchmany(4017)
time2 = datetime.datetime.now()
print time2 - time1

0:00:24.348000

def ResultIter(cursor, arraysize=100):
    'An iterator that uses fetchmany to keep memory usage down'
    while True:
        results = cursor.fetchmany(arraysize)
        if not results:
            break
        for result in results:
            yield result
time1 = datetime.datetime.now()
for result in ResultIter(cur):
    pass
time2 = datetime.datetime.now()
print time2 - time1

0:00:31.181000

你知道为什么它这么慢吗?我该怎么做才能让它变快?(好吧,如果可能的话…)

感谢

对于仍在研究这个问题的人来说,我有另一个可能会有所帮助的解决方案。基本上默认情况下,pyodbc使用一个非常旧的ODBC驱动程序。如果你有这样的东西,可能你的pyodbc也被设置为旧驱动程序:

driver='{SQL Server}'

为了解决此问题,我已在连接属性中将其更改为以下内容。

driver='{ODBC Driver 17 for SQL Server}'

一开始我需要30-60秒才能跑完,现在只需要5秒。

最新更新