Я пытаюсь перебрать шейп-файл, поочередно выбирая каждый объект и копируя его во временный шейп-файл, чтобы включить в анализ объединения. Я использую курсор, чтобы найти имя идентификатора для каждой функции, для которой я устанавливаю переменную «Имя». Всякий раз, когда я пытаюсь использовать эту переменную как часть предложения where в arcpy.Select_analysis, я получаю сообщение об ошибке:
Ошибка выполнения: ОШИБКА 999999: Ошибка выполнения функции. Использован неверный оператор SQL. Использован неверный оператор SQL. Не удалось выполнить (Выбрать).
Код, который я использую:
Name = 101
where = "\'\"StudyID\" = \\'"+str(Name)+"\\'\'"
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", where)
Если я наберу это без использования переменных:
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", '"StudyID" = \'101\'')
работает нормально
Что мне нужно сделать, чтобы поместить переменную в оператор SQL?
источник
Name
поступает от пользователя?Одна вещь, которая значительно упрощает написание предложений WHERE, - это использование
AddFieldDelimiters
функции, которая автоматически добавляет правильные специфичные для СУБД разделители для идентификаторов полей, такие как двойные кавычки для FGDB и скобки для PGDB.Другая вещь, которую вы должны рассмотреть, это то, является ли значение числом, строкой или другим типом данных. В частности, строки заключаются в одинарные кавычки, а числа - нет. Вы можете проверить тип поля и добавить одинарные кавычки, если это строковое поле.
Например:
См. Также функцию в этом ответе для многозначной версии вышеуказанной функции.
источник
Попробуй это:
источник
Мне нравится использовать тройные кавычки. Я думаю, что их легче всего читать. Например,
В зависимости от
type(name)
вас может или не может понадобиться'
вокруг%s
. Для чисел вам нужно,'
но не для текста.источник
Для меня это решение работает лучше всего, так как я могу заменить как переменную на интересующую область, так и на критерии оценки.
источник