当前位置: 首页 > 面试题库 >

如何将参数化的sql查询放入变量中,然后在Python中执行?

拓拔奇
2023-03-14
问题内容

我了解在Python中格式化sql查询的正确方法是这样的:

cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3)

这样可以防止sql注入。我的问题是是否有一种方法可以将查询放入变量然后执行?我已经尝试了下面的示例,但收到错误。是否有可能做到这一点?

sql="INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(sql)

问题答案:

这是cursor.execute的呼叫签名:

Definition: cursor.execute(self, query, args=None)

    query -- string, query to execute on server
    args -- optional sequence or mapping, parameters to use with query.

因此execute最多期望3个参数(args是可选的)。如果给出了args,则应该是一个序列。所以

sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(*sql_and_params)

不上班,因为

cursor.execute(*sql_and_params)

将元组sql_and_params扩展为4个参数(同样,仅执行期望3)。

如果您真的必须使用

sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3

那么您必须将其分解为cursor.execute

cursor.execute(sql_and_params[0],sql_and_params[1:])

但是我认为仅使用两个变量会感到更加愉快:

sql = "INSERT INTO table VALUES (%s, %s, %s)"
args= var1, var2, var3
cursor.execute(sql, args)


 类似资料:
  • 问题内容: 我想编写一个包含NodeJS变量的SQL查询。当我这样做时,它给我一个错误“未定义”。 我希望下面的SQL查询能够识别该变量。如何将NodeJS变量输入到SQL查询中?它周围是否需要特殊字符,例如或。 问题答案: 您将需要将变量的 值 放入SQL语句中。 这不好: 这将起作用,但是从SQL注入攻击中并不安全: 为了防止SQL注入,您可以像这样转义您的价值: 但是最好的方法是使用参数替换

  • //这是Jdbc代码 当我在Oracle sql developer中运行上面的查询时,它工作得很好,但是当我用上面的jdbc代码运行它时,它会抛出不是所有变量绑定的异常。如何在JDBC中运行上述查询

  • 问题内容: 在维基节点mysql的,我注意到变量(样)插入SQL查询两种不同的方式,一种是通过在查询字符串中间插入一个变量,另一种方式是通过将在查询字符串,并在下一个参数的数组中定义这些值。查询中替换的值将被转义。 有什么区别?什么时候应该在另一个上使用?(如果我们希望表名是一个变量,是否应该将其转义?) 维基密码 Wiki链接 :https : //github.com/felixge/node

  • 问题内容: 我一直在试图弄清楚为什么以下代码未在我的ResultSet中生成任何数据: 另一方面,以下各项可以正常运行: SCHOOL的数据类型为CHAR(9字节)。除了setString,我还尝试了: 我完全留意接下来要研究什么;Eclipse调试器说,即使在setString或setCharacterStream之后,SQL查询也不会更改。我不确定这是因为设置参数不起作用,还是调试器根本无法在

  • 这是唯一的解决办法吗:

  • 问题内容: 我在控制器的函数中。 因此,从表单中,我得到了一个变量的值,说: 然后,我需要在WHERE语句中嵌入该变量(即它的值)。如果我对值进行硬编码,它将带来正确的结果,但是我已经尝试了各种方法来插入该变量而没有成功。好吧,假设我设法使用了该变量,那么我将不得不研究绑定以避免SQL注入,但是到目前为止,我要说的是,看看该变量是否可以在查询中使用。 我已经试过了,双引号,串联。$ vx。,花括号