如何高效地替换字符串中的双引号和单引号?
我正在解析一个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))