2010-09-01 98 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