Saya mencoba untuk mengulang melalui shapefile, memilih masing-masing fitur pada gilirannya dan menyalinnya ke shapefile sementara dengan dimasukkan dalam analisis gabungan. Saya menggunakan kursor untuk menemukan nama ID untuk setiap fitur yang saya atur ke variabel 'Nama'. Setiap kali saya mencoba menggunakan variabel ini sebagai bagian dari klausa di mana di arcpy.Select_analysis saya mendapatkan kesalahan:
ExecuteError: ERROR 999999: Fungsi eksekusi kesalahan. Pernyataan SQL yang tidak valid digunakan. Pernyataan SQL yang tidak valid digunakan. Gagal menjalankan (Pilih).
Kode yang saya gunakan adalah:
Name = 101
where = "\'\"StudyID\" = \\'"+str(Name)+"\\'\'"
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", where)
Jika saya mengetiknya tanpa menggunakan variabel:
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", '"StudyID" = \'101\'')
ini bekerja dengan baik
Apa yang harus saya lakukan agar sesuai dengan variabel ke dalam pernyataan sql?
sumber
Name
berasal dari input pengguna?Satu hal yang membuat penulisan WHERE klausa jauh lebih mudah adalah menggunakan
AddFieldDelimiters
fungsi, yang secara otomatis menambahkan pembatas khusus DBMS yang tepat untuk pengidentifikasi bidang, seperti tanda kutip ganda untuk FGDB dan tanda kurung untuk PGDB.Hal lain yang harus Anda pertimbangkan adalah apakah nilainya berupa angka, string, atau tipe data lainnya. Secara khusus, string dibungkus dengan tanda kutip tunggal sedangkan angka tidak. Anda bisa memeriksa jenis bidang dan menambahkan tanda kutip tunggal jika itu adalah bidang string.
Misalnya:
Lihat juga fungsi dalam jawaban ini untuk versi multi-nilai dari fungsi di atas.
sumber
Coba ini:
sumber
Saya suka menggunakan tiga kutipan. Saya pikir mereka yang paling mudah dibaca. Sebagai contoh,
Tergantung pada
type(name)
Anda mungkin perlu atau tidak perlu'
sekitar%s
. Untuk angka, Anda perlu'
tetapi tidak untuk teks.sumber
Bagi saya, solusi ini bekerja paling baik karena saya bisa mengganti variabel dengan bidang minat dan kriteria nilai.
sumber