pyodbc多个SQL查询

时间:2019-03-05 20:29:57

标签: python pyodbc

我正在使用 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)

1 个答案:

答案 0 :(得分:0)

您不必创建新连接,仅需一个即可。但是,如果您要返回大量数据,则不会使用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循环将我的处理时间从一个多小时减少到了几分钟(对于5百万行x 30列,约3分钟)。