This实际上是我如何使用_mssql。
即使在我使用fetch_array()
之后,一切正常。
问题是,当我遍历fetch_array()
时,将6K行写入电子邮件正文需要十多分钟。这是不可接受的。
我有更好的方法吗?
编辑:还没有想出在这里复制python代码的最佳方法,但这里使用的是破旧格式的代码。编写电子邮件正文的代码:
results=mssql.fetch_array()
mssql.close()
resultTuple = results[0]
if resultTuple[1] == 0:
emailBody = 'Zero Rows returned'
if test or resultTuple[1] != 0:
i = 0
columnTuples = resultTuple[0]
listOfRows = resultTuple[2]
columns = []
emailBody = ''
if test: print 'looping results'
while i < len(columnTuples):
columns.append(columnTuples[i][0])
emailBody = emailBody + columns[i].center(20) + '\t'
i = i + 1
emailBody = emailBody + '\n'
for rowTuple in listOfRows: #row loop
for x in range(0, len(rowTuple)): #field loop
emailBody = emailBody + str(rowTuple[x]).center(20) + '\t'
if test: print x
emailBody = emailBody + '\n'
答案 0 :(得分:1)
您能否向我们展示一些迭代结果并创建电子邮件的代码?如果我不得不做出一个疯狂的猜测,我会说你可能违反了这个习惯用法:“将字符串构建为一个列表并在最后使用'.join。”如果你继续添加一个字符串,你就会在每次迭代时创建一个新的(逐渐变大的)字符串,该字符串在二次时间内运行。
(根据OP的要求将此评论转化为答案。将根据需要编辑更完整的答案。)
修改强>
好的,我的猜测是正确的。你会想要这样的东西:
email_lines = []
for row in result:
line = do_something_with(row)
email_lines.append(line)
email_body = '\n'.join*(email_lines)