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

发布于 2021-01-29 15:04:02

我了解在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)
关注者
0
被浏览
79
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看