2014-02-14 2 views
0

Здравствуйте У меня есть элемент списка, который представляет собой строку, как это:Split строка для создания фильтров SQL

scope_items = [ "4760 5,2 5,1, 7,1 ОКС 8.0.0, чикаго 4.1.0 4.0.0 3.2. 0 1.0.1 3.0.0" ]

что мне удалось „разорваны“ внутри списка я назвал scope_list

scope_list = ['4760', '5.2', '5.1,', 'acs', '8.0.0', '7.1,', 'chicago', '4.1.0', '4.0.0', '3.2.0', '1.0.1', '3.0.0'] 

Но, как вы можете увидеть запятой (,) хранится слишком ...

Я хочу, чтобы создать SQL заявление, как:

WHERE (
      columnvalue1 = 4760 
     AND columnvalue2 IN (5.2,5.1) 
    ) 
    OR (
      columnvalue1="acs" 
     AND columnvalue2 IN (8.0.0,7.1) 
    ) 
    OR (
      columnvalue1 = "chicago" 
     AND colmnvalue2 IN (4.1.0, 4.0.0, 3.2.0, 1.0.1, 3.0.0) 
    ) 

Я использую SQLAlchemy, мне удалось первую часть (до OR), как это:

or_args = [and_(
table1.c.columnvalue1 == scope[0], 
table1.c.columnvalue12.in_(scope[1:])) for scope in scope_list] 

Как я могу сделать то же самое для всех остальных значений после каждого ,?

ответ

0

Вы могли split на запятую:

scope_groups = scope_items[0].split(", ") 

Теперь каждый элемент scope_groups является одна группа для правила, где 0th элемент является колонки и любые другие элементы значения:

for group in scope_groups: 
    group = group.split(" ") 
    # use group[0] and group[1:]