我的字符串格式有什么问题? (即使参数中有尾随逗号)

What is wrong with my string format? (Even WITH the trailing comma in the parameter)

首先我尝试了:

sqlite3.cursor.execute("select * from mytable where mycol=?", (myval,))

当我在 shell 中执行它时,它起作用了。在我的 class 方法中,它告诉我: ProgrammingError:提供的绑定数量不正确。当前语句使用0,提供12个

然后我尝试了:

sqlite3.cursor.execute("select * from mytable where mycol='%s'" % myval)

当我在 shell 中执行它时,它起作用了。在我的 class 方法中,它告诉我: ProgrammingError:提供的绑定数量不正确。当前语句使用0,提供12个

所以我决定先格式化字符串,然后再传入。像这样:

sqlcmd = "select * from mytable where mycol='%s'" % myval

当我在 shell 中执行它时,它起作用了。在我的 class 方法中,它告诉我同样的错误: ProgrammingError:提供的绑定数量不正确。当前语句使用0,提供12个

我的方法是这样定义的:

def mymethod(self, myval):
    cur = self.conn.cursor()
    cur.execute( "..." ... )
    ....

我错过了什么?

这是一个 "know your tools" 问题。正如我在上面的评论中提到的,我的问题是不理解 when/how pyCharm 重新加载修改后的代码。我在 pyCharm 的 python 控制台中测试我的 class。但是在我更改代码后,它不会自动重新加载 python 代码,而是运行缓存的代码。

但真正让我失望的部分是当它报告错误时,它从当前源代码中提取源代码行,而不是从缓存代码中提取。所以我第一次通过时忘记了尾随命令 ...(myval,)。当我收到错误时,我意识到我的错误并添加了它。我重新运行它并显示相同的错误,但是从我修改的代码中提取了错误中的源代码。但这不是正在执行的缓存代码。

我在命令行上 运行 它并且它工作了(如预期的那样)。只是没有意识到我在更改代码时需要重新加载 python 控制台。