首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"%s“% format vs "{0}".format() vs "?”格式化

"%s“% format vs "{0}".format() vs "?”格式化
EN

Stack Overflow用户
提问于 2010-09-11 17:45:15
回答 3查看 18K关注 0票数 16

在这个post about SQLite中,aaronasterling告诉我

  • cmd = "attach \"%s\" as toMerge" % "b.db":是wrong
  • cmd = 'attach "{0}" as toMerge'.format("b.db"):correct
  • cmd = "attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))

是对的吗?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-11 17:56:29

代码语言:javascript
复制
"attach \"%s\" as toMerge" % "b.db"

您应该使用'而不是",这样就不必逃避。

您使用了旧的格式字符串,这些字符串是不推荐的。

代码语言:javascript
复制
'attach "{0}" as toMerge'.format("b.db")

这将使用新的Python版本中的新格式字符串特性,如果可能的话,应该使用新版本而不是旧版本。

代码语言:javascript
复制
"attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))

这个选项完全省略了字符串格式,而是使用了一个SQLite特性,所以这是正确的方法。

大优势:不存在SQL注入的风险。

票数 20
EN

Stack Overflow用户

发布于 2010-09-11 17:51:48

第一种方法和第二种方法产生相同的结果,但是在新版本的Python中,更喜欢第二种方法来格式化字符串。

但是,第三种方法是更好的方法,因为它使用参数而不是操纵字符串。这样既快又安全。

票数 6
EN

Stack Overflow用户

发布于 2010-09-11 17:47:47

因为它不是被逃脱的。如果将b.db替换为用户输入,则会使您容易受到SQL注入的影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3691975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档