2010-09-01 94 views
4

我抓起一串SQL的ID,我需要使用Python和PyODBC更新:如何从Python,PyODBC,SQL中去除“()”?

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

问题是,当我查看这些ID在Python抢下前,我得到两种:

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?

感谢,

阿德里安

回答

7

首先:

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

然后放弃你可怕while循环:

for row in rows: 
    print 'SELECT ID FROM One.dbo.Two WHERE ID = %s' % row 
+0

它的工作!谢谢! :) – AdriMagnon 2010-09-01 01:00:29

2

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

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

输出:

[(1016,), (1017,), (1019,), (1020,), (1021,)] 
(1020,) 
1020