在这篇关于 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', ))
: 是对的
但是,我认为第一个和第二个是相同的。这三者有什么区别?
在这篇关于 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', ))
: 是对的但是,我认为第一个和第二个是相同的。这三者有什么区别?
"attach \"%s\" as toMerge" % "b.db"
你应该使用'
而不是"
,所以你不必逃避。
您使用了已弃用的旧格式字符串。
'attach "{0}" as toMerge'.format("b.db")
这使用了来自较新 Python 版本的新格式字符串功能,如果可能,应该使用该功能而不是旧版本。
"attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))
这完全省略了字符串格式,而是使用 SQLite 功能,所以这是正确的方法。
大优势:无 SQL 注入风险
第一种和第二种产生相同的结果,但第二种方法更适合在较新版本的 Python 中格式化字符串。
然而,第三种是更好的方法,因为它使用参数而不是操作字符串。这更快更安全。
因为它没有被逃脱。如果您将 b.db 替换为用户输入,那么您将容易受到 SQL 注入的攻击。