使用了无效的SQL语句。
使用了无效的SQL语句。
执行(选择)失败。
我正在使用的代码是:
Name = 101
where = "\'\"StudyID\" = \'"+str(Name)+"\'\'"
arcpy.Select_analysis("C:\input.shp", "C:\output.shp", where)
如果我不使用变量就输入它:使变量适合sql语句?
#1 楼
另一种可能更简单的方法是:where = '"StudyID" = ' + "'%s'" %Name
#2 楼
使编写WHERE子句更容易的一件事是使用AddFieldDelimiters
函数,该函数自动为字段标识符添加正确的,DBMS特定的分隔符,例如FGDB的双引号和PGDB的括号。您还需要考虑的另一件事是值是数字,字符串还是其他数据类型。具体来说,字符串用单引号引起来,而数字则没有。如果它是字符串字段,则可以检查字段类型并添加单引号。
例如:
import arcpy
def buildWhereClause(table, field, value):
"""Constructs a SQL WHERE clause to select rows having the specified value
within a given field and table."""
# Add DBMS-specific field delimiters
fieldDelimited = arcpy.AddFieldDelimiters(table, field)
# Determine field type
fieldType = arcpy.ListFields(table, field)[0].type
# Add single-quotes for string field values
if str(fieldType) == 'String':
value = "'%s'" % value
# Format WHERE clause
whereClause = "%s = %s" % (fieldDelimited, value)
return whereClause
if __name__ == "__main__":
inputfc = r"C:\input.shp"
outputfc = r"C:\output.shp"
fieldname = "StudyID"
fieldvalue = 101
whereclause = buildWhereClause(inputfc, fieldname, fieldvalue)
arcpy.Select_analysis(inputfc, outputfc, whereclause)
另请参见此函数回答上述功能的多值版本。
评论
好点子。我将此函数添加到我的arcpy辅助函数模块中,因此它被定义为arcpy.buildWhereClause
– Blord-castillo
13-10-15在17:01
#3 楼
试试这个:Name = 1
study = "StudyID"
where = '"' + study + '" = ' + "'" + str(Name) + "'"
#4 楼
我喜欢使用三重引号。我认为它们是最容易阅读的。例如,name = 101
where = """ "StudyID" = '%s' """ % name
arcpy.Select_analysis("C:\input.shp", "C:\output.shp", where)
取决于
type(name)
,您可能需要'
周围的%s
,也可能不需要。对于数字,您确实需要'
,但对于文本则不需要。#5 楼
对我来说,此解决方案效果最佳,因为我可以将变量替换为关注领域和价值标准。field = "Sport"
value = "Basketball"
where = """"{}" = '{}'""".format(field,value)
评论
“在使用ArcGIS 10(或者可能以后)时,不需要用引号引起来”。必须根据基础DBMS的语法规则指定字段定界符。看我的答案。
–blah238
13年2月12日在17:39
上面的评论是对匿名编辑的回应,我为确保此答案的正确性而回滚。
–blah238
13年2月12日在18:18
如果“名称”来自用户输入,这不是SQL注入漏洞吗?
– jpmc26
17年2月4日1:00