2017-10-29 8 views
-1

何回か試しましたが、エラーを解決できません。 私のPythonのコードは次のようになります。TypeError:validate()は2つの引数をとります(1が指定されています)

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() 

これは、このエラーは、それを取得ほど簡単です

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

答えて

1

このエラーを送信します。 itemkey

def validate(item, key)

validateは、2つの引数を期待しています。

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

ボーナスポイント:あなたは次の行にタイプミスがあり

  1. しかし、あなただけの1つを提供

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

    があるべき

    pv_name = validate(sport.get("name")) 
            #^dot 
    
  2. あなたのコードはSQLインジェクションに対して脆弱です。クエリを連結する代わりに、パラメータ化されたクエリを使用します。

    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)) 
    
関連する問題