%s“%format vs”{0}.format()vs“?”形式

2024-06-26 13:46:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个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', )):是正确的

但是,我认为第一个和第二个是一样的。这三者有什么区别?


Tags: cmdformatexecutedbsqliteas错误post
3条回答

第一个和第二个方法产生相同的结果,但是第二个方法更适合在较新版本的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注入的攻击。

相关问题 更多 >