#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. добавление обратной косой черты не распознает первую переменную привязки