Python добавляет символ «» без всякой причины

#python #string

Вопрос:

У меня есть код, в котором я добавляю номер, а затем создаю URL-адрес для запроса

 opa_number = '31108100'    
def get_data(opa_number):
        print(opa_number)
        url = "https://phl.carto.com/api/v2/sql?q=SELECT * FROM opa_properties_public WHERE parcel_number = " 
                "'"   self.opa_number   "'"
 

Пожалуйста, смотрите изображение

Когда я запускаю этот код в консоли строка за строкой, он работает так, как должен

Когда я запускаю этот код в отладчике, он дает мне ‘https://phl.carto.com/api/v2/sql?q=SELECT * ИЗ opa_properties_public, ГДЕ parcel_number = «888020936» и добавьте «» вокруг opa_number Мой вопрос в том, почему Python добавляет этот символ и мешает ему это делать

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

1. От него убегают. Отладчик играет умно и показывает вам repr строку, так что теоретически вы могли бы использовать ее для идеальной реконструкции оригинала. Когда вы печатаете из обычной программы, она использует str , что является удобным для пользователя представлением.

2. Хорошо, и в чем же твой вопрос ? Как вы думаете, что должно произойти вместо этого? Как вы думаете, почему это «без всякой причины»? Подсказка: что произойдет, если вы попытаетесь использовать 'opa_number = '1'' в своем исходном коде?

3. Это прямая SQL-инъекция, и ее следует избегать. Запустите q=DELETE FROM opa_properties , например… (не обязательно быть вами, любой может запустить это)

4. Кроме того, если что-то работает, то почему вы думаете, что это нужно изменить?

Ответ №1:

Это является следствием попытки отобразить строки как законные строковые литералы Python. Отладчик по-видимому, перекрываем строку отображения, и выбрали безоговорочно использовать одинарные кавычки вокруг строк, которые она дисплеев (это, кажется, не полагаться на то, что str ‘ы repr , которая будет динамически выбирать внешние кавычки должны быть противоположность внутренней, если используется только один внутренне; это то, что вы увидите, когда такая строка была подтверждена в интерактивном интерпретаторе).

Поскольку он использует внешние одинарные кавычки, он должен отступить от внутренних одинарных кавычек, чтобы сделать допустимый строковый литерал. Обратных косых черт на самом деле нет, ваш код ведет себя так, как ожидалось.

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

1. спасибо за ваше объяснение, я думал, что это ошибка, из-за которой моя программа выходит из строя. Теперь я нашел , в чем на самом деле причина