TypeError:validate()只需要2个参数(给定1个)

时间:2017-10-29 15:00:20

标签: sql-server python-2.7

我试了几次,但我无法解决错误。 我的python代码如下所示:

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 个答案:

答案 0 :(得分:1)

此错误非常简单。

def validate(item, key)

validate需要2个参数:itemkey

但是,您只提供一个:

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

奖励积分:

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