2010-09-01 33 views
4

J'ai attrapé un groupe d'ID SQL que je dois mettre à jour avec Python et pyodbc:Comment faire un strip "()," à partir de Python, PyODBC, SQL Returns?

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

J'ai un deuxième morceau de code qui met à jour les ID:

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

Le problème est quand je visionne les ID saisirent en Python plus tôt, je reçois soit:

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

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

ou

if row: 
    print row[3] 

(1020,)

J'ai juste besoin le numéro que je peux exécuter ma deuxième partie du script pour le:

WHERE ID = '1051'" 

partie. J'ai essayé avec:

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

et il m'a donné:

ID SELECT DE One.dbo.Two WHERE ID = (1049,)
ID SELECT DE One.dbo.Two WHERE ID = (1048,)
etc ...

Et j'ai essayé:

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

et je suis arrivé:

'1017,)'

Comment puis-je bande les caractères de l'ID ainsi je peux réutiliser l'ID?

Merci,

Adrian

Répondre

7

d'abord:

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

abandonner ensuite votre horrible while:

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

Il a fonctionné! Je vous remercie! :) – AdriMagnon

2

Je crois que le problème est que vous accédez à un tuple à partir d'une liste, donc besoin de spécifier l'emplacement dans la liste et l'emplacement en tuple:

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

sorties:

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