2017-10-29 1 views
-1

Ich habe mehrere Male versucht, aber ich kann den Fehler nicht beheben. Mein Python-Code sieht wie folgt aus:TypeError: validate() benötigt genau 2 Argumente (1 gegeben)

def validate(item,key): 
    if key in item: 
     if isinstance(item[key], (int, long, float)): 
      stro=str(item[key]) 
      if stro.lower()=="true": 
       return "1" 
      if stro.lower()=="false": 
       return "0" 
      return str(item[key]) 

     stro= item[key].encode('ascii', 'replace') 
     return stro.replace("'","''") 
    else: 
     return "null" 

for sport in oddsjson: 
    pv_id = validate(sport.get("id")) 
    pv_name= validate(sport,get("name")) 
    sql= "INSERT INTO odds_sports(pv_id,pv_name) VALUES ('" 
    sql= sql+ pv_id + "','" 
    sql= sql+ pv_name + "')" 
    cursor.execute(sql) 
    conn.commit() 

Es sendet diese Fehler

pv_id = validate(sport.get("id")) 
TypeError: validate() takes exactly 2 arguments (1 given) 

Antwort

1

Dieser Fehler ist so einfach, wie es nur geht.

def validate(item, key)

validate erwartet 2 Argumente: item und key.

jedoch nur ein liefern:

pv_id = validate(sport.get("id")) 

Bonuspunkte:

  1. Sie haben einen Tippfehler in der nächsten Zeile:

    pv_name = validate(sport,get("name")) 
            #^comma 
    

    sollte

    pv_name = validate(sport.get("name")) 
            #^dot 
    
  2. Ihr Code ist anfällig für SQL-Injection. Verwenden Sie eine parametrisierte Abfrage, anstatt Abfragen zu verketten.

    sql = "INSERT INTO odds_sports(pv_id, pv_name) VALUES (?, ?)" # or %s, depending on 
                       # the library/connector 
                       # you are using 
    cursor.execute(sql, (pv_id, pv_name)) 
    
Verwandte Themen