【问题标题】:Ignoring escape characters in python忽略python中的转义字符
【发布时间】:2019-12-18 14:39:11
【问题描述】:

我正在尝试将标题插入数据库。有时标题带有引号并引发错误。

我不能用 \" 替换引号,因为它认为我正在转义引号。

sql = 'UPDATE `table_name` SET `title`="{}";'

title = 'A "Title" With Quotes'

sql.format(title.replace('"','\"'))

这会将引号替换为更多的引号,因此不会发生任何变化。

'UPDATE `table_name` SET `title`="A "Title" With Quotes";'

如果我尝试转义反斜杠,它不会转义任何内容。

sql.format(title.replace('"','\\"'))

'UPDATE `table_name` SET `title`="A \\"Title\\" With Quotes";'

【问题讨论】:

  • 您应该使用查询参数而不是尝试将值粘合到您的 SQL 中。

标签: python sql pymysql


【解决方案1】:

最好的方法是使用三引号,将里面的文本解释为字符串:

sql = """UPDATE `table_name` SET `title`="{}";""" 

你可以格式化它是你想要的:

sql = """UPDATE `table_name` SET `title`="{}";""".format('A \\"B\\"')
print(sql)

输出:

UPDATE `table_name` SET `title`="A \"B\"";

适用于 MySQL

【讨论】:

  • sql = """UPDATE table_name SET title="{}";""".format('带引号的“标题”') 'UPDATE table_name SET @987654328 @="带引号的“标题”";'无效的sql
  • 这是我的输出:UPDATE table_name SET title="A \\"B\\"";
  • @ChadSkiles 这不是我使用 python 3.7 得到的,请参阅此处repl.it/repls/WoefulEntireVirtualmachines
  • 这很奇怪。我不在 IDLE 中工作,但它可以在其他任何地方工作。
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2016-03-17
  • 2021-07-22
  • 1970-01-01
  • 2011-06-08
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多