如果是字符串变量,如何在没有显式引号的情况下编写预准备语句

时间:2014-11-14 08:54:19

标签: python mysql

我使用MySQLdb库。当我像这样进行查询时

cursor.execute("SELECT COUNT(*) FROM srcdst WHERE TABLESRC = ?", src)

其中src是一个字符串变量,我收到一个错误:

TypeError: not all arguments converted during string formatting

如果我这样做,我也会收到错误:

cursor.execute("SELECT COUNT(*) FROM srcdst WHERE TABLESRC = %s" % src)

但是,在这种情况下我没有错误:

cursor.execute("SELECT COUNT(*) FROM srcdst WHERE TABLESRC = '%s'" % src)

但我不喜欢这句话是围绕%s的明确引用。我想让驱动程序决定变量的类型并隐式执行。否则,在自动查询的情况下,执行解析变量类型和“准备”预准备语句的所有这些例程将是一个真正的问题。

修改

好像我似乎找到了一个解决方案。正确的语法是:

cursor.execute("SELECT COUNT(*) FROM srcdst WHERE TABLESRC = %s" , (src))

3 个答案:

答案 0 :(得分:0)

代码中的

'src'表示您要传递的值而不是问号。如果是这样,请尝试以下代码。否则忽略

cursor.execute("SELECT COUNT(*) FROM srcdst WHERE TABLESRC = " + src);

答案 1 :(得分:0)

然后试试这个

cursor.execute("SELECT COUNT(*) FROM srcdst WHERE TABLESRC like '%" + src + "%'");

答案 2 :(得分:0)

好像我似乎找到了一个解决方案。正确的语法是:

cursor.execute(" SELECT COUNT(*)FROM srcdst WHERE TABLESRC =%s",(src))