Как эффективно заменить двойные и одинарные кавычки в строке? - PullRequest
2 голосов
/ 19 февраля 2010

Я анализирую XML-файл и вставляю его в базу данных. Однако, поскольку некоторые тексты содержат двойные или одинарные кавычки, у меня возникли проблемы со вставкой В настоящее время я использую код, показанный ниже. Но, похоже, это неэффективно.

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

Есть ли способ вставить текст без замены этих цитат?

OR

Есть ли эффективный способ их эффективной замены?

Спасибо!

Ответы [ 3 ]

12 голосов
/ 19 февраля 2010

Почему вы не можете вставить строки, содержащие кавычки, в вашу базу данных?Есть какой-то странный тип данных, который допускает любой символ, кроме кавычки?Или вы строите оператор insert с буквенными строками, а не привязываете свои строки к параметрам запроса, как вы должны делать?

Если вы делаете

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

, тогда это небезопаснои неправильно.Вместо этого вы должны делать

cursor.execute('insert into mytable (somefield) values (%(myparam)s)',
                dict(myparam=mystring))
2 голосов
/ 19 февраля 2010

Вы должны использовать str.translate вместо двух replace() вызовов

>>> import string
>>> quotes_to_spaces=string.maketrans('"\'',"  ")
>>> s=s.translate(quotes_to_spaces)
1 голос
/ 19 февраля 2010

Вы можете попробовать что-то вроде _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 () , но я думаю, что сначала вам нужно подключение к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...