2013-12-12 3 views
0

Я пытаюсь создать графики за последнюю четыре недели из указанного номера недели (неделю за неделей)cursor.fetchall несколько запросов к одному списку

До сих пор я модель и вид работаю отлично, я в состоянии запросить данные из необработанных баз данных кроме того, я знаю, как создать четыре списка из запроса:

results = [i for i in chain.from_iterable(cursor.fetchall())] 

[u'AAA', 191L, u'BBB', 21L, u'CCC', 420L, u'DDD', 150L, u'EEE', 759L, u'FFF', 290L, u'GGG', 166L, u'HHH', 8L, u'III', 1147L, u'JJJ', 1427L, u'KKK', 34L, u'LLL', 8L] 
[u'AAA', 191L, u'BBB', 21L, u'CCC', 420L, u'DDD', 150L, u'EEE', 759L, u'FFF', 290L, u'GGG', 166L, u'HHH', 8L, u'III', 1147L, u'JJJ', 1427L, u'KKK', 34L, u'LLL', 8L] 
[u'AAA', 191L, u'BBB', 21L, u'CCC', 420L, u'DDD', 150L, u'EEE', 759L, u'FFF', 290L, u'GGG', 166L, u'HHH', 8L, u'III', 1147L, u'JJJ', 1427L, u'KKK', 34L, u'LLL', 8L] 
[u'AAA', 191L, u'BBB', 21L, u'CCC', 420L, u'DDD', 150L, u'EEE', 759L, u'FFF', 290L, u'GGG', 166L, u'HHH', 8L, u'III', 1147L, u'JJJ', 1427L, u'KKK', 34L, u'LLL', 8L] 

, но я до сих пор не удался объединить один список из этих четырех списков, в конце концов, список должен выглядеть как ниже:

[["ZZZ", "AAA", "BBB", "CCC"], ["48", 21, 223, 232], ["47", 334, 343, 232], ["46", 345, 542, 245], ["45", 764, 463, 989]] 

Где: ZZZ = Номер недели "48", "47", "46", "45" AAA, BBB, CCC .... = имя из запроса

любое предложение?

мой models.py

def four_weeks(year, week): 
    end = datetime(year, 1, 1) + relativedelta(weeks=week-1, weekday=SU) 
    start = end - relativedelta(weeks=4, weekday=MO) 
    mint, maxt = datetime.min.time(), datetime.max.time() 
    for dt in rrule(WEEKLY, start, count=4): 
     yield dt.combine(dt, mint), dt.combine(dt + timedelta(days=6), maxt) 

views.py

def WeekCombo(request): 
    fweeks = [] 
    year = 2013 #this is only for test 
    week = 48 #in future it will be integrated with form 
    cursor = connections['mydba'].cursor() 
    for start, end in four_weeks(year, week): 
     cursor.execute("SELECT DISTINCT (p.name) AS platform, count(e.id) AS count FROM event e, lu_platform p WHERE e.platform_id = p.id AND e.sourcetype_id = 1 AND e.event_datetime BETWEEN %s AND %s AND e.sender_id NOT IN (759, 73) GROUP BY p.name ORDER BY p.name", [start, end]) 
     results = [i for i in chain.from_iterable(cursor.fetchall())] 
     fweeks.append(results) 
    return render_to_response('form.html', {'fweeks': fweeks}, context_instance=RequestContext(request)) 
+0

Похоже, вы хотите объединить полученные списки. http://stackoverflow.com/questions/1720421/merge-two-lists-in-python –

+1

Не совсем понятно, каков ваш вопрос. Вы хотите объединить результаты в качестве словаря? {'AAA': (17L, 44L, 76L), 'BBB': (21L, 96L, 225L, 304L) ....? – Mzzl

+0

Почему вы не используете модели django? – scriptmonster

ответ

0

Похоже, вы хотите объединить полученные списки.

How to append list to second list (concatenate lists)

Вы можете создать пустой список и распространить его по результатам каждого этапа запроса шагом.

Если вы хотите, чтобы выполнить все запросы первыми и объединить списки впоследствии использовать itertools.chain

>>> listoflists = [['a'], ['b', 'c'], ['d', 'e', 'f']] 
>>> [i for i in itertools.chain.from_iterable(listoflists)] 
['a', 'b', 'c', 'd', 'e', 'f'] 
Смежные вопросы