Есть ли более эффективный способ записи результатов запроса в Python? - PullRequest
0 голосов
/ 10 ноября 2010

Это эффективно то, как я использую _mssql.

Все отлично работает, даже после того, как я использую fetch_array().

Проблема в том, что когда я повторяючерез fetch_array() запись 6К строк в тело письма занимает более десяти минут.Это просто неприемлемо.

Есть ли лучший способ для меня это сделать?

РЕДАКТИРОВАТЬ: не нашли лучший способ скопировать код 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'  

1 Ответ

1 голос
/ 10 ноября 2010

Не могли бы вы показать нам некоторый код итерации по результатам и создания электронного письма?Если бы мне пришлось делать дикие предположения, я бы сказал, что вы, вероятно, нарушаете эту идиому: «Создайте строки в виде списка и используйте« .join в конце ».Если вы продолжаете добавлять к строке по ходу дела, вы создаете новую (и постепенно увеличивающуюся) строку на каждой итерации, которая выполняется за квадратичное время.

(Превратил этот комментарий в ответ по запросу OP.При необходимости отредактирую для более полного ответа.)

Редактировать:

Хорошо, мое предположение было правильным.Вы хотите что-то вроде этого:

email_lines = []
for row in result:
    line = do_something_with(row)
    email_lines.append(line)
email_body = '\n'.join*(email_lines)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...