2013-04-09 4 views
1

Я проделал некоторые поиски и думал, что я попрошу, прежде чем пытаться изобретать колесо.Python - Создание динамического SQL-запроса с `-` в диапазоне

Я ищу для создания 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

+1

вы имеете в виду «выберите * from your_table, где id в (1,2,3,4,5,6) "?? – pinkdawn

ответ

0

если запрос SQL стиль полностью поддерживается, вы можете поместить его в список, и сгенерировать запрос как это:

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

Просто вы можете сделать это таким образом,

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] 

Query это,

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

Большое спасибо! – jpedder

+2

@jpedder убедитесь, что вы не используете это с ненадежным вводом. Использование строковой интерполяции для генерации SQL-запросов оставляет вас широко открытыми для SQL-инъекций. –