我正在使用 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)
您不必创建新连接,只有一个就足够了。但是,如果您想返回大量数据,我将不会使用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分钟)。