我正在解析xml文件并将其插入数据库。 但是,由于某些文本包含双引号或单引号,我遇到插入问题。目前我正在使用下面显示的代码。但它似乎效率低下。
s = s.replace('"', ' ')
s = s.replace("'", ' ')
有没有办法在不更换这些引文的情况下插入文字?
OR
有效的方法可以有效地替代它们吗?
谢谢!
答案 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(),但我认为您首先需要数据库连接。