如何有效地替换字符串中的双引号和单引号?
问题描述:
我正在解析一个xml文件并将其插入到数据库中。 但是,由于一些文本包含双引号或单引号,我在插入时遇到问题。目前我正在使用下面显示的代码。但它似乎效率低下。如何有效地替换字符串中的双引号和单引号?
s = s.replace('"', ' ')
s = s.replace("'", ' ')
有没有什么方法可以插入文本而不替换这些引用?
或
是否有任何有效的方法来有效地取代它们?
谢谢!
答
为什么不能在数据库中插入包含引号的字符串?是否有一些奇怪的数据类型允许除引号之外的任何字符?或者,您是否正在使用文字字符串构建一个insert
声明,而不是像您应该做的那样将您的字符串绑定到查询参数?
如果你正在做
cursor.execute('insert into mytable (somefield) values ("%s")' % (mystring))
那么这是不安全的和错误的。相反,你应该做的
cursor.execute('insert into mytable (somefield) values (%(myparam)s)',
dict(myparam=mystring))
答
你可以尝试像_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(),但我认为你首先需要一个数据库连接。
答
你应该使用str.translate
,而不是做两个replace()
电话
>>> import string
>>> quotes_to_spaces=string.maketrans('"\''," ")
>>> s=s.translate(quotes_to_spaces)