在 python 中的字符串中用单个反斜杠替换双反斜杠
Replace a double backslash with a single backslash in a string in python
我知道这个主题的变体已经在别处讨论过,但是 none 的其他线程很有帮助。
我想把python的字符串交给sql。但是,字符串中可能会出现撇号 (')。我想用反斜杠转义它们。
sql = "update tf_data set authors=\'"+(', '.join(authors).replace("\'","\\'"))+"\' where tf_data_id="+str(tf_data_id)+";"
但是,这将始终在我的字符串中给出 \'
。因此,反斜杠本身被转义并且 sql 语句不起作用。
有人可以帮助我或给我一个替代方法吗?
谢谢
正如其他人所提到的,如果您使用 python 程序包来执行您的 SQL,请使用提供的带有参数占位符(如果可用)的方法。
我的回答解决了提到的转义问题。
使用前缀为 r
的字符串文字
print(r"""the\quick\fox\\jumped\'""")
输出:
the\quick\fox\\jumped\'
您正在使用双引号字符串,但仍然转义其中的单引号。这不是必需的,您需要做的就是转义要在替换操作中使用的反斜杠。
>>> my_string = "'Hello there,' I said."
>>> print(my_string)
'Hello there,' I said.
>>> print(my_string.replace("'", "\'"))
\'Hello there,\' I said.
请注意,我使用的是印刷品。如果您只是要求 Python 在替换操作后向您显示字符串的表示形式,您会看到双反斜杠,因为它们需要转义。
>>> my_string.replace("'", "\'")
"\'Hello there,\' I said."
干脆不要。
也不要连接 sql 查询,因为这些查询容易 sql 注入。
改为使用参数化查询:
sql = "update tf_data set authors=%(authors)s where tf_data_id=%(data_id)s"
# or :authors and :data_id, I get confused with all those sql dialects out there
authors = ', '.join(authors)
data_id = str(tf_data_id)
# db or whatever your db instance is called
db.execute(sql, {'authors': authors, 'data_id': data_id})
我知道这个主题的变体已经在别处讨论过,但是 none 的其他线程很有帮助。
我想把python的字符串交给sql。但是,字符串中可能会出现撇号 (')。我想用反斜杠转义它们。
sql = "update tf_data set authors=\'"+(', '.join(authors).replace("\'","\\'"))+"\' where tf_data_id="+str(tf_data_id)+";"
但是,这将始终在我的字符串中给出 \'
。因此,反斜杠本身被转义并且 sql 语句不起作用。
有人可以帮助我或给我一个替代方法吗? 谢谢
正如其他人所提到的,如果您使用 python 程序包来执行您的 SQL,请使用提供的带有参数占位符(如果可用)的方法。
我的回答解决了提到的转义问题。 使用前缀为 r
的字符串文字print(r"""the\quick\fox\\jumped\'""")
输出:
the\quick\fox\\jumped\'
您正在使用双引号字符串,但仍然转义其中的单引号。这不是必需的,您需要做的就是转义要在替换操作中使用的反斜杠。
>>> my_string = "'Hello there,' I said."
>>> print(my_string)
'Hello there,' I said.
>>> print(my_string.replace("'", "\'"))
\'Hello there,\' I said.
请注意,我使用的是印刷品。如果您只是要求 Python 在替换操作后向您显示字符串的表示形式,您会看到双反斜杠,因为它们需要转义。
>>> my_string.replace("'", "\'")
"\'Hello there,\' I said."
干脆不要。
也不要连接 sql 查询,因为这些查询容易 sql 注入。
改为使用参数化查询:
sql = "update tf_data set authors=%(authors)s where tf_data_id=%(data_id)s"
# or :authors and :data_id, I get confused with all those sql dialects out there
authors = ', '.join(authors)
data_id = str(tf_data_id)
# db or whatever your db instance is called
db.execute(sql, {'authors': authors, 'data_id': data_id})