4

我抓住了一堆我需要用 Python 和 PyODBC 更新的 SQL ID:

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 = ''")

我有第二段代码可以更新 ID:

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

问题是当我查看之前在 Python 中抓取的 ID 时,我得到:

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

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

或者

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 从 One.dbo.Two WHERE ID = (1049, )
从 One.dbo.Two SELECT ID WHERE ID = (1048, )
等...

我试过了:

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

我得到了:

'1017, )'

如何从 ID 中删除字符以便重复使用 ID?

谢谢,

阿德里安

4

2 回答 2

8

首先:

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

然后放弃你可怕的while循环:

for row in rows:
  print 'SELECT ID FROM One.dbo.Two WHERE ID = %s' % row
于 2010-09-01T00:56:51.883 回答
2

我认为问题在于您正在从列表中访问元组,因此需要指定列表中的位置和元组中的位置:

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

输出:

[(1016, ), (1017, ), (1019, ), (1020, ), (1021, )]
(1020, )
1020
于 2011-10-27T17:42:25.847 回答