在这个post about SQLite中,aaronasterling告诉我
cmd = "attach \"%s\" as toMerge" % "b.db":是wrongcmd = 'attach "{0}" as toMerge'.format("b.db"):correctcmd = "attach ? as toMerge"; cursor.execute(cmd, ('b.db', )):是对的吗?
但是,我一直认为第一和第二是一样的。这三者之间有什么区别呢?
发布于 2010-09-11 17:56:29
"attach \"%s\" as toMerge" % "b.db"您应该使用'而不是",这样就不必逃避。
您使用了旧的格式字符串,这些字符串是不推荐的。
'attach "{0}" as toMerge'.format("b.db")这将使用新的Python版本中的新格式字符串特性,如果可能的话,应该使用新版本而不是旧版本。
"attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))这个选项完全省略了字符串格式,而是使用了一个SQLite特性,所以这是正确的方法。
大优势:不存在SQL注入的风险。
发布于 2010-09-11 17:51:48
第一种方法和第二种方法产生相同的结果,但是在新版本的Python中,更喜欢第二种方法来格式化字符串。
但是,第三种方法是更好的方法,因为它使用参数而不是操纵字符串。这样既快又安全。
发布于 2010-09-11 17:47:47
因为它不是被逃脱的。如果将b.db替换为用户输入,则会使您容易受到SQL注入的影响。
https://stackoverflow.com/questions/3691975
复制相似问题