如何去除Python、PyODBC、SQL返回中的“()”?

4 投票
2 回答
3535 浏览
提问于 2025-04-16 03:33

我抓取了一些需要用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 FROM One.dbo.Two WHERE ID = (1049, )
SELECT ID FROM One.dbo.Two WHERE ID = (1048, )
等等...

我还尝试过:

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

结果是:

'1017, )'

我该如何去掉ID中的字符,以便我可以重新使用这些ID呢?

谢谢,

Adrian

2 个回答

2

我觉得问题出在你在一个列表里访问了一个元组,所以你需要同时指定列表中的位置和元组中的位置:

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

输出结果:

[(1016, ), (1017, ), (1019, ), (1020, ), (1021, )]
(1020, )
1020
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

撰写回答