如何高效地替换字符串中的双引号和单引号?

2 投票
3 回答
656 浏览
提问于 2025-04-15 19:28

我正在解析一个xml文件,并把它插入到数据库中。不过,因为有些文本里面包含了双引号或单引号,所以在插入的时候遇到了问题。目前我使用的代码如下,但感觉效率不高。

s = s.replace('"', ' ')
s = s.replace("'", ' ')

有没有什么办法可以插入这些文本,而不需要替换掉这些引号呢?

或者

有没有更有效的方法来替换它们呢?

谢谢!

3 个回答

1

你可以试试像 _mysql.escape_string() 这样的东西:

>>> import _mysql
>>> a = '''I said, "Don't do that"'''
>>> a
'I said, "Don\'t do that"'
>>> _mysql.escape_string(a)
'I said, \\"Don\\\'t do that\\"'

不过,手册建议使用 connection.escape_string(),但我觉得你需要先建立一个数据库连接。

2

你应该使用 str.translate,而不是做两个 replace() 的调用。

>>> import string
>>> quotes_to_spaces=string.maketrans('"\'',"  ")
>>> s=s.translate(quotes_to_spaces)
12

为什么你不能把包含引号的字符串插入到数据库里呢?是因为有某种奇怪的数据类型不允许引号吗?还是说你在构建一个包含字面字符串的insert语句,而不是像应该那样把字符串绑定到查询参数上呢?

如果你在做

cursor.execute('insert into mytable (somefield) values ("%s")' % (mystring))

那样的话,这是不安全的,也是错误的。相反,你应该这样做

cursor.execute('insert into mytable (somefield) values (%(myparam)s)',
                dict(myparam=mystring))

撰写回答