2024-06-26 13:46:43 发布
网友
在这个post about SQLite里,阿罗那斯特林告诉我
cmd = "attach \"%s\" as toMerge" % "b.db"
cmd = 'attach "{0}" as toMerge'.format("b.db")
cmd = "attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))
但是,我认为第一个和第二个是一样的。这三者有什么区别?
第一个和第二个方法产生相同的结果,但是第二个方法更适合在较新版本的Python中格式化字符串。
不过,第三种方法更好,因为它使用参数而不是操作字符串。这样既快又安全。
"attach \"%s\" as toMerge" % "b.db"
您应该使用',而不是",这样就不必转义。
'
"
您使用了不推荐使用的旧格式字符串。
'attach "{0}" as toMerge'.format("b.db")
这将使用来自较新Python版本的新格式字符串特性,如果可能的话,应该使用该特性而不是旧版本。
"attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))
这个方法完全省略了字符串格式,而是使用了SQLite特性,所以这是正确的方法。
大优势:没有SQL注入的风险
因为它没有逃走。如果将b.db替换为用户输入,将使您容易受到SQL注入的攻击。
第一个和第二个方法产生相同的结果,但是第二个方法更适合在较新版本的Python中格式化字符串。
不过,第三种方法更好,因为它使用参数而不是操作字符串。这样既快又安全。
您应该使用
'
,而不是"
,这样就不必转义。您使用了不推荐使用的旧格式字符串。
这将使用来自较新Python版本的新格式字符串特性,如果可能的话,应该使用该特性而不是旧版本。
这个方法完全省略了字符串格式,而是使用了SQLite特性,所以这是正确的方法。
大优势:没有SQL注入的风险
因为它没有逃走。如果将b.db替换为用户输入,将使您容易受到SQL注入的攻击。
相关问题 更多 >
编程相关推荐