在这post about SQLite中,aaronasterling告诉我
cmd = "attach \"%s\" as toMerge" % "b.db"
:错了cmd = 'attach "{0}" as toMerge'.format("b.db")
:是正确的cmd = "attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))
:是对的但是,我认为第一和第二是相同的。这三者有什么不同?
答案 0 :(得分:20)
"attach \"%s\" as toMerge" % "b.db"
您应该使用'
代替"
,这样您就不必逃避。
您使用了不推荐使用的旧格式字符串。
'attach "{0}" as toMerge'.format("b.db")
这使用了较新的Python版本的新格式字符串功能,如果可能的话,应该使用它来代替旧版本。
"attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))
这个完全省略字符串格式,而是使用SQLite功能,所以这是正确的方法。
大优势:没有SQL注入的风险
答案 1 :(得分:6)
第一个和第二个产生相同的结果,但第二个方法更适合在较新版本的Python中格式化字符串。
然而,第三种是更好的方法,因为它使用参数而不是操纵字符串。这既快又安全。
答案 2 :(得分:3)
因为它没有被转义。如果用用户输入替换b.db,则会使您容易受到SQL注入的攻击。</ p>