代码之家  ›  专栏  ›  技术社区  ›  Micolho

execute或字符串%s传递的查询参数之间的差异

  •  0
  • Micolho  · 技术社区  · 7 年前

    建议我使用以下代码:

    query = 'Select "logtext" from log where jobid = %s;'
    cursorErrorData.execute(query, str(row[0]))
    

    不要使用此选项:

    query = 'Select "logtext" from log where jobid = %s;' % str(row[0])
    cursorErrorData.execute(query)
    

    我使用了第一个示例,它工作得很好,但在这个示例中它崩溃了。

    str(第[0]行)检索的数据如下:

    3090
    

    这是个例外:

    并非所有参数都在字符串格式化期间转换

    有人能给我解释一下这两种方法的区别吗?为什么在这种情况下,我不能使用它?

    2 回复  |  直到 7 年前
        1
  •  1
  •   khelwood Muhammed Elsayed.radwan    7 年前

    第二个参数为 execute 应该是一系列参数。如果您提供 str(row[0]) ,则将其解释为一个序列,而不是单个参数。(字符串是一个字符序列。)

    把它包装成一个元组。

    cursorErrorData.execute(query, (str(row[0]),))
    
        2
  •  1
  •   Rakesh    7 年前

    你需要通过 元组 在的第二个参数中 cursor.execute

    例如:

    query = 'Select "logtext" from log where jobid = %s;'
    cursorErrorData.execute(query, (str(row[0],))    #-->tuple (str(row[0],)