2017-07-13 3 views
0

Ich bin ein Neuling für Python, mit Python 2.7. Ich gebe eine Liste von Zeichenfolgen von der Befehlszeile aus und führe zwei verschiedene Abfragen unter Verwendung dieser Liste von Zeichenfolgen aus. Die Liste enthält 4 gültige IDs, die in der ersten Abfrage zurückgegeben werden. Die letzten beiden IDs sind ungültig. Ich muss beide Ergebnisse in eine Datei drucken.Python-Return-Liste, wenn Abfrage kein Ergebnis

ich die Abfrage leite als:

python empdetails.py -i "'ADM10','TMC34','LAB57','WSD44','GM22','AD32'" -o (file_location) 
import os 
import sys,getopt 
from impala.dbapi import connect 

def main(argv): 

    input = '' 
    output = '' 
    try: 
     opts, args = getopt.getopt(argv,"hi:o:",["input=","output"]) 
    except getopt.GetOptError: 
     print 'Usage append.py -i <input> -o <output>' 
     sys.exit(2) 
    for opt, arg in opts: 
     if opt == '-h': 
     print 'Usage append.py -i <input> -o <output>' 
     sys.exit() 
     elif opt in ("-i", "--input"): 
     input = arg 
     elif opt in ("-o", "--output"): 
     output = arg 
     print input 


    conn = connect(host='hostname', port=port_number, auth_mechanism='GSSAPI', kerberos_service_name='impala', use_ssl=True) 

    cursor = conn.cursor() 

    sql = ('select empcode from empinfo where empcode in (select ecode from emptrav_det where ecode in({}))'.format(input)) 
    cursor.execute (sql) 
    duplicate = cursor.fetchall() 

    sql =('select ecode from emptrav_det where exp_c in({})'.format(input)) 
    print sql 
    cursor.execute (sql) 
    new = cursor.fetchall() 
    if duplicate !=0: 
     with open('output', 'a') as f: 
      for emp in duplicate: 
       f.write(str(emp[0]) + " " + ("Traveled\n")) 

    if new ==0: 
     with open('output', 'a') as f: 
      for emp in new: 
       f.write(str(emp[0]) + " " + ("Invalid ID\n")) 

    conn.close() 

if __name__ == '__main__': 
    main(sys.argv[1:]) 

Antwort

0

Das Problem ist hier:

if new == 0: 
    with open('output', 'a') as f: 
     for emp in new: 
      f.write(str(emp[0]) + " " + ("Invalid ID\n")) 

Zunächst einmal new wird ein leerer list oder tuple sein. Um das zu überprüfen, können Sie nicht if new == 0 tun .. Sie müssen so etwas wie:

if not new: 

Das zweite Problem ist die Logik:

Sie iterieren new in einem Block, der für if new == 0 prüft. Wie erwarten Sie, dass das funktioniert? (zu viel Copy-Paste aus dem obigen Code, denke ich). Tun Sie dies statt:

if not new: 
    with open('output', 'a') as f: 
     f.write("Invalid ID\n") 
+0

auf diese Weise versucht, aber nicht bekommen, die Ausgabe für ungültig, auch würde ich brauche die IDs zu drucken, die – Venkat

+0

ungültig ist dann schreiben 'input' zu Ihrer Datei. Der Punkt ist, die Logik zu verstehen und was du falsch machst. 'input' ist ein falscher Variablenname btw; Es schattiert ein Python-eingebaut –

Verwandte Themen