Способ добавления символа одинарной кавычки в строку при построении запроса oracle на python

#python

#питон

Вопрос:

У меня есть этот метод, который создает запрос и передает два строковых параметра. Но когда я тестирую это, у него есть escape-символы «перед одинарной кавычкой»‘.

Запрос может принимать только собственные запросы в строковой форме

Я также пробовал метод string.replace, но не работает

 replace('\', '')
 

Вот этот код

 def update_query(self, status, row_id):
    return '''UPDATE TABLE SET STATUS = {0} WHERE ID = {1}'''.format(status, row_id)
 

Вот пример вывода:

 'UPDATE TABLE SET STATUS = 'Success' WHERE ID = 1'
 

Спасибо

Ответ №1:

Вы также можете использовать f-string для форматирования вашей строки

 
def update_query(self,status, row_id):
    return f"UPDATE TABLE SET STATUS = '{status}' WHERE ID = {row_id}"

>>> update_query("Success",1)
"UPDATE TABLE SET STATUS = 'Success' WHERE ID = 1"
 

Комментарии:

1. Я использую более старую версию python, это неприменимо.

Ответ №2:

Я думаю, вам абсолютно необходимо использовать здесь подготовленные операторы, которые другие ответы, похоже, не рекомендуют (по какой-либо причине). Попробуйте использовать что-то в этом роде:

 sql = "UPDATE TABLE SET STATUS = :status WHERE ID = :id"
cursor.prepare(sql)
cursor.execute(None, {'status':status, 'id':row_id})
 

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

Комментарии:

1. Привет, Тим, я использую вспомогательный класс для выполнения запросов к БД, который принимает только собственные запросы в строковой форме.

Ответ №3:

вам нужно добавить в код

 def update_query(self, status, row_id):
    return '''UPDATE TABLE SET STATUS = '{0}' WHERE ID = {1}'''.format(status, row_id)
 

Комментарии:

1. обратная косая черта () не обязательна.

2. добавление обратной косой черты не распознает первую переменную привязки