Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-构建以“-”为范围的动态sql查询_Python_Python 2.7_Arcpy - Fatal编程技术网

Python-构建以“-”为范围的动态sql查询

Python-构建以“-”为范围的动态sql查询,python,python-2.7,arcpy,Python,Python 2.7,Arcpy,我已经做了一些研究,并认为在尝试重新发明轮子之前我会问 我希望构建一个参数数目未知的sql查询。参数类型为int,它们是项目编号 用户可以输入任意数量的项目,格式为1、2、3-10、12 我需要构建一个sql风格的查询(实际上是针对arcpy的),它将返回字段项的所有这些值 我可以很容易地把这些都列在一个列表中,比如 mylist=[1,2,3,4,5,6,7,8,9,10,11,12] 但是我需要构建这个查询,我想应该是这样的 item = 1 or item = 2 or ...... 非

我已经做了一些研究,并认为在尝试重新发明轮子之前我会问

我希望构建一个参数数目未知的sql查询。参数类型为int,它们是项目编号

用户可以输入任意数量的项目,格式为1、2、3-10、12

我需要构建一个sql风格的查询(实际上是针对arcpy的),它将返回字段项的所有这些值

我可以很容易地把这些都列在一个列表中,比如 mylist=[1,2,3,4,5,6,7,8,9,10,11,12]

但是我需要构建这个查询,我想应该是这样的

item = 1 or item = 2 or ......
非常感谢


Jon

如果完全支持sql风格的查询,您可以将其放入列表中,并生成如下查询:

items = [1,2,3,4,5]
query = 'select * from table where item in (%s)' % ','.join(items)

你可以这样做

user_input = '1, 2, 3-10, 12'
data = [item for item in user_input.split(', ')]
result = []

for d in data:
    if '-' in d:
        result.extend(range(int(d.partition('-')[0], int(d.partition('-')[2])+2))
    else:
        result.append(int(d))
检查结果是什么

>>> result
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
质疑它,

'SELECT * FROM table WHERE id in (%s)' % ','.join(str(item) for item in result)

您的意思是“从(1,2,3,4,5,6)中id所在的_表中选择*”?@jpeder请确保您没有使用不可信的输入。使用字符串插值生成SQL查询会使您对SQL注入敞开大门。