Как убрать (из Python, PyODBC, SQL Returns)?

Я взял кучу идентификаторов SQL, которые мне нужно обновить с помощью Python и PyODBC:

import pyodbc
cnxn = pyodbc.connect('DSN=YesOne;PWD=xxx')
cursor = cnxn.cursor()
cursor.execute("SELECT ID FROM One.dbo.Two WHERE STATUS = 'OnGoing' AND ID = ''")

У меня есть второй бит кода, который обновляет идентификаторы:

cursor.execute("Update One.dbo.Two SET STATUS = 'Completed', Modified = 'Today' WHERE ID = '1051'")

Проблема в том, что когда я просматриваю идентификаторы, полученные в Python ранее, я получаю:

row = cursor.fetchall()
f row:
    print row

[(1016, ), (1017, ), (1019, ), (1020, ), (1021, ), (1025, ), (1026, ), (1027, ), (1029, ), (1048, ), (1049, )]

or

if row:
    print row[3]

(1020, )

Мне нужен только номер, чтобы я мог запустить вторую часть скрипта для:

WHERE ID = '1051'"

часть. Я пробовал с:

count = len(row)
while count > 0:
    newrow = row[count-1]
    print 'SELECT ID FROM One.dbo.Two WHERE ID = ' + str(newrow)
    count = count-1

и это дало мне:

SELECT ID FROM One.dbo.Two WHERE ID = (1049, )
SELECT ID FROM One.dbo.Two WHERE ID = (1048, )
и т. д.

И я попытался:

str(row[1]).lstrip('(),')

и я получил:

'1017, )'

Как удалить символы из идентификатора, чтобы я мог повторно использовать идентификатор?

Спасибо,

Адриан


person AdriMagnon    schedule 01.09.2010    source источник


Ответы (2)


Прежде всего:

rows = [x[0] for x in cursor.fetchall()]

Затем откажитесь от своего ужасного цикла while:

for row in rows:
  print 'SELECT ID FROM One.dbo.Two WHERE ID = %s' % row
person Vadim Shender    schedule 01.09.2010

Я считаю, что проблема в том, что вы обращаетесь к кортежу из списка, поэтому вам нужно указать местоположение в списке и местоположение в кортеже:

row = cursor.fetchall()
f row:
    print row
    print row[3]
    print row[3][0]

выходы:

[(1016, ), (1017, ), (1019, ), (1020, ), (1021, )]
(1020, )
1020
person dharol    schedule 27.10.2011