我的字符串格式有什么问题? (即使参数中有尾随逗号)
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 控制台。
首先我尝试了:
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 控制台。