Próbuję zapętlić plik kształtu, wybierając kolejno każdą funkcję i kopiując ją do tymczasowego pliku kształtu, aby uwzględnić ją w analizie związku. Używam kursora, aby znaleźć nazwę ID dla każdej funkcji, dla której ustawiam zmienną „Nazwę”. Ilekroć próbuję użyć tej zmiennej jako część klauzuli where w arcpy.Select_analysis, pojawia się błąd:
ExecuteError: ERROR 999999: Błąd wykonywania funkcji. Użyto niepoprawnej instrukcji SQL. Użyto niepoprawnej instrukcji SQL. Nie udało się wykonać (Wybierz).
Używam kodu:
Name = 101
where = "\'\"StudyID\" = \\'"+str(Name)+"\\'\'"
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", where)
Jeśli wpisuję to bez użycia zmiennych:
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", '"StudyID" = \'101\'')
to działa dobrze
Co muszę zrobić, aby dopasować zmienną do instrukcji SQL?
arcpy
arcgis-10.0
select
error-999999
where-clause
Flo Harrison
źródło
źródło
Name
pochodzi od danych wprowadzonych przez użytkownika?Jedną z rzeczy, która znacznie ułatwia pisanie klauzul WHERE, jest użycie
AddFieldDelimiters
funkcji, która automatycznie dodaje poprawne, specyficzne dla DBMS separatory dla identyfikatorów pól, takie jak podwójne cudzysłowy dla FGDB i nawiasy kwadratowe dla PGDB.Inną rzeczą, którą musisz wziąć pod uwagę, jest to, czy wartość jest liczbą, łańcuchem lub innym typem danych. W szczególności ciągi są zawinięte w pojedyncze cudzysłowy, a liczby nie. Możesz sprawdzić typ pola i dodać pojedyncze cudzysłowy, jeśli jest to pole ciągu.
Na przykład:
Zobacz także funkcję w tej odpowiedzi, aby uzyskać wielowartościową wersję powyższej funkcji.
źródło
Spróbuj tego:
źródło
Lubię używać potrójnych cytatów. Myślę, że są najłatwiejsze do odczytania. Na przykład,
W zależności od tego
type(name)
możesz potrzebować lub nie być w'
pobliżu%s
. W przypadku liczb potrzebujesz znaku,'
ale nie tekstu.źródło
Dla mnie to rozwiązanie działa najlepiej, ponieważ mogę zastąpić zmienną zarówno polem zainteresowania, jak i kryterium wartości.
źródło