2013-07-15 6 views
1

Я пытаюсь добавить столбец в список, возвращенный методом fetchall() в pyopbc, но он дает мне ошибку. Вот мой код:Добавление столбца в список pyobbc

import pyodbc 
import time 
import calendar 
from datetime import date 

#variable declaration 
today = date.today() 
beginRange = date(today.year,today.month,1) 
endRange = date(today.year,today.month,2) #limit data to 2 days for testing 

#connect to database 
connJobDtl = pyodbc.connect("DSN=Global_MWM;UID=Master") 
cJobDtl = connJobDtl.cursor() 

#database query 
cJobDtl.execute("select job,suffix,seq,date_sequence,[...]") 
dataJobDtl = cJobDtl.fetchall() 
cJobDtl.close() 

#add another column to the list, date_sequence formatted to YYYY-MM 
dataJobDtl = [x + [x[3].strftime("%Y-%m")] for x in dataJobDtl] 

Я получаю эту ошибку, когда я запускаю скрипт:

File "...\jobDetailScript.py", line 23, in <module> 
    dataJobDtl = [x + [x[3].strftime("%Y-%m")] for x in dataJobDtl] 
TypeError: unsupported operand type(s) for +: 'pyodbc.Row' and 'list' 

В качестве теста я создал типичный пример в оболочке Python и работал отлично, но я вручную создал список списков, а не создавал список из fetchall(). Как я могу устранить эту ошибку?

ответ

1

кажется довольно простым - поскольку в сообщении об ошибке говорится, что вы пытаетесь использовать + два разных типа объектов. Если вы просто запустили строки в виде списков, они должны работать, поэтому из моих собственных специальных тестов:

>>>cur.execute('<removed>') #one of my own tables 
>>>tmp = cur.fetchall() 
>>>type(tmp[0]) #this is KEY! You need to change the type 

<type 'pyodbc.Row'> 

>>>tt = [1,2,3] 
>>>tmp[0] + tt #gives the same error you have 

Traceback (most recent call last): 
    File "<pyshell#13>", line 1, in <module> 
tmp[0] + tt 
TypeError: unsupported operand type(s) for +: 'pyodbc.Row' and 'list' 

>>>list(tmp[0]) + tt #returns a list as you wanted 

[14520496, ..., 1, 2, 3] 
+0

Это отлично работало с Брэдом. Спасибо вам за помощь! – emiller3061

Смежные вопросы