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

在需要手动构造查询的情况下,如何使用查询参数?

  •  0
  • ayushgp  · 技术社区  · 5 年前

    我使用Python 2,有以下代码:

    with conn.cursor() as cursor:
        info("Updating {} records".format(len(records_to_update)))
        for record in records_to_update:
            query = "UPDATE my_table SET "
            params_setters = []
            # Process all fields except wsid when updating
            for index, header in enumerate(DB_COLUMNS_IN_ORDER[1:]):
                if record[index] is not None:
                    params_setters.append("{} = '{}' ".format(header, record[index]))
            query += " , ".join(params_setters)
            query += " WHERE id = '{}'".format(record[0])
            cursor.execute(query)
    

    我如何在这里使用查询参数进行转义,而不必在以下地方手动执行:

    params_setters.append("{} = '{}' ".format(header, record[index]))
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Booboo    5 年前

    如果我理解你的问题,你想用一个事先准备好的陈述。如果你使用的是司机 %s 用于表示查询参数(SQLite使用 ? )那么:

    with conn.cursor() as cursor:
        info("Updating {} records".format(len(records_to_update)))
        params = []
        for record in records_to_update:
            query = "UPDATE my_table SET "
            params_setters = []
            # Process all fields except wsid when updating
            for index, header in enumerate(DB_COLUMNS_IN_ORDER[1:]):
                if record[index] is not None:
                    params_setters.append("{} = %s ".format(header))
                    params.append(record[index])
            query += " , ".join(params_setters)
            query += " WHERE id = %s"
            params.append(record[0])
            cursor.execute(query, params)