2

我正在使用pyodbc,我想从不同的表中返回大量数据。最有效的方法是什么?我必须每次都创建一个新连接还是可以重复使用一个?

import pyodbc

def docLauncher(connetStr):
    conn = pyodbc.connect(connetStr)
    cursor = conn.cursor()

    cursor.execute('SELECT COLUMN1 FROM TABLE1')
    companyName = cursor.fetchone()[0]

    conn1 = pyodbc.connect(connetStr)
    cursor1 = conn1.cursor()

    cursor1.execute('SELECT COLUMN2 FROM TABLE2')
    ver = cursor1.fetchone()[0]

    print(companyName)
    print(ver)
4

1 回答 1

2

您不必创建新的连接,只需一个就足够了。但是,如果您希望返回大量数据,我不会使用这些fetch函数。我发现这非常耗时。这就是我访问 pyodbc 并返回数百万行以使用的方式(如果需要,可以将其放入 docLauncher() 函数中):

import pyodbc

conn = pyodbc.connect(connection_string)
crsr = conn.cursor()

my_data = crsr.execute(sql_string)

for row in my_data:
    # do something with your data here
    print(row)

my_data_2 = crsr.execute(sql_string_2)

for row_2 in my_data_2:
    print(row_2)

如果您想导出数据(例如,导出到 csv),这将非常有用。而不是这个:

for row in my_data:
    print(row)

你会这样做:

with open(file_name, 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow([x[0] for x in crsr.description])  # column headers
    for row in my_data:
        writer.writerow(row)

使用for循环将我的处理时间从一个多小时减少到几分钟(500 万行 x 30 列约 3 分钟)。

于 2019-06-20T14:45:34.543 回答