2017-09-14 2 views
1

Ich versuche, eine Abfrage von einem Server einige Daten nehmen zu machen, aber jetzt möchte ich mehrere Anfragen und mehrere Verbindungen machen, das ist das Problem:Python Wörterbuch mit Pyodbc

Ich möchte ein machen für, vorbei mit all meinen Verbindungen und speichert meine „IN“ Bedingungen für jeden:

if len(su_dict['dst_srv']) > 1: 
    su_dict['skill'].clear() 
    su_dict['vdn'].clear() 
    i = 0 
    for x in range(len(su_dict['dst_srv'])): 
     skill_varios = {} 
     sql = ("SELECT skill FROM info_skill_vdn_campana WHERE activo = 1 AND pbx = 'V2' AND dst_srv = '"+str(list(su_dict['dst_srv'])[i])+"';") 
     skill = crsr_kala.execute(sql).fetchall() 
     skill_varios[str(list(su_dict['dst_srv'])[i])] = ', '.join([x[0] for x in skill]) 
     i += 1 
    print skill_varios 

Das Problem hier ist, dass, wenn ich mein Ergebnis auf dem Bildschirm gedruckt nur die letzten IN-Bedingung gespeichert, aber ich weiß nicht, warum ...

Dies ist das Ergebnis des Wörterbuchs:

{'172.59.80.101': '2474, 2475, 2477, 2476'} 

Aber es muss das sein, weil ich 2 Server habe:

{'172.59.80.01': '2474, 2475, 2477, 2476' '172.80.52.31': '54, 60, 80, 787'} 

Antwort

0

Sie die Wörterbuch Einstellung der for Schleife seinen freien Raum nach innen, so dass es nur die letzten Datensatz enthält. Versuchen Sie dies:

if len(su_dict['dst_srv']) > 1: 
    su_dict['skill'].clear() 
    su_dict['vdn'].clear() 
    i = 0 
    skill_varios = {} 

    for x in range(len(su_dict['dst_srv'])): 
     sql = ("SELECT skill FROM info_skill_vdn_campana WHERE activo = 1 AND pbx = 'V2' AND dst_srv = '"+str(list(su_dict['dst_srv'])[i])+"';") 
     skill = crsr_kala.execute(sql).fetchall() 
     skill_varios[str(list(su_dict['dst_srv'])[i])] = ', '.join([x[0] for x in skill]) 
     i += 1 

    print(skill_varios) 

Viel Glück!

+0

Dieser Code enthält eine potenzielle SQL-Injection-Schwachstelle. – RegularlyScheduledProgramming