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

时间:2010-02-19 03:19:17

标签: python database string

我正在解析xml文件并将其插入数据库。 但是,由于某些文本包含双引号或单引号,我遇到插入问题。目前我正在使用下面显示的代码。但它似乎效率低下。

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

有没有办法在不更换这些引文的情况下插入文字?

OR

有效的方法可以有效地替代它们吗?

谢谢!

3 个答案:

答案 0 :(得分:12)

为什么不能将包含引号的字符串插入数据库?是否有一些奇怪的数据类型允许除引号之外的任何字符?或者您正在使用文字字符串构建insert语句,而不是将字符串绑定到查询参数,而不是应该这样做?

如果你正在做

cursor.execute('insert into mytable (somefield) values ("%s")' % (mystring))
那时那是不安全和错误的。相反,你应该做

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

答案 1 :(得分:2)

您应该使用 str.translate 而不是进行两次replace()来电

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

答案 2 :(得分: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(),但我认为您首先需要数据库连接。