我正在使用 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)
答案 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分钟)。