Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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中迭代多个列表_Python_Mysql_For Loop_Flask_Jinja2 - Fatal编程技术网

当列表长度不同时,在Python中迭代多个列表

当列表长度不同时,在Python中迭代多个列表,python,mysql,for-loop,flask,jinja2,Python,Mysql,For Loop,Flask,Jinja2,我有一个数据表,我正在从MySQL数据库中提取数据,并试图匹配行,但我很难找出最后一部分。我使用Flask将三个使用“izip_longest”的字典列表传递给Jinja模板,然后在Jinja模板中使用for循环遍历每一行的变量。问题是我正在迭代的三个列表的长度是可变的,并且不总是相同的长度 我已经达到了如下所示的程度,但我需要在整行中匹配日期。在这种情况下,S-Date/07-11在整行中应为07-11,或在其他列中为空 S-Date | S-Place | G-Date | G-Place

我有一个数据表,我正在从MySQL数据库中提取数据,并试图匹配行,但我很难找出最后一部分。我使用Flask将三个使用“izip_longest”的字典列表传递给Jinja模板,然后在Jinja模板中使用for循环遍历每一行的变量。问题是我正在迭代的三个列表的长度是可变的,并且不总是相同的长度

我已经达到了如下所示的程度,但我需要在整行中匹配日期。在这种情况下,S-Date/07-11在整行中应为07-11,或在其他列中为空

S-Date | S-Place | G-Date | G-Place | F-Date | F-Place
------------------------------------------------------
 07-11     7       07-12     7        07-11      7
 07-12     7       07-13     7        
 07-13     7       07-14     7
 07-14     7
我觉得我很快就明白了,但我一直盯着这个问题看,不太明白

这是我从中绘制数据的SQL表:

location | date | status
------------------------
 001      07-10    success
 002      07-10    success
 123      07-11    fail
 222      07-11    fail
 333      07-11    fail
 232      07-11    fail
 444      07-12    pending
 555      07-13    pending
这是用于获取每个特定日期的故障数的查询:

SELECT 'date', COUNT(`location`) as 'location' FROM mytable 
  WHERE YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1) 
   AND `status` LIKE '%fail%' GROUP BY DATE(`date`)
这是指每天的成功次数:

SELECT `date`, COUNT(`location`) as 'location' FROM mytable 
   WHERE YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1) 
     AND `status` NOT LIKE '%fail%' GROUP BY DATE(`date`)

我需要失败和成功与日期分组相匹配,这样我就可以生成一个堆叠的条形图来显示单个日期/条形图的每个数字。

我不太确定这一切
S-date
F-date
业务是什么,但我想你想知道的是每个唯一日期的成功和失败总数

我有一个非常简单的Python解决方案:

from collections import defaultdict
from collections import Counter

data = defaultdict(list)

for row in database_table:
    data[row[1]].append(row[2])

results = {}

for date, attempts in data.iteritems():
   stats = Counter(attempts) 
   results[date] = {'total': len(attempts)}
   for stat, count in stats.most_common():
      results[date][stat] = count
现在,结果是一个字典,键是日期,值是另一个包含所有统计信息的字典。在模板中,您只需:

<table>
   <thead>
      <tr>
        <th>Date</th>
        <th>Total Places</th>
        <th>Success</th>
        <th>Failed</th>
        <th>Pending</th>
      </tr>
   </thead>
   <tbody>
     {% for date, stats in results.iteritems() %}
         <tr>
            <td>{{ date }}</td>
            <td>{{ stats['total'] }}</td>
            <td>{{ stats['success'] }}</td>
            <td>{{ stats['fail'] }}</td>
            <td>{{ stats['pending'] }}</td>
         </tr>
     {% endfor %}
   </tbody>
</table>
然后,只需调整模板即可:

{% for record in results %}
  <tr>
    <td>{{ record['date'] }}</td>
    <td>{{ record['total'] }}</td>
    <td>{{ record['success'] }}</td>
    <td>{{ record['fail'] }}</td>
    <td>{{ record['pending'] }}</td>
  </tr>
{% endfor %}
{%用于结果%中的记录]
{{record['date']}
{{record['total']}
{{record['success']}
{{record['fail']}
{{record['pending']}
{%endfor%}

您到底想实现什么目标?有什么理由不能用查询来实现这一点吗?@e4c5我最终尝试生成一个堆叠条形图,其中一段表示“成功”,另一段表示“失败”。SQL查询的问题是,有时没有成功/失败,并且在使用“分组依据”时,无法显示0值。我看到的每一个与这个问题相关的例子都涉及到连接,但我只使用一个表see@e4c5我用一些额外的信息编辑了我的原始帖子。谢谢,但再想想什么是S-Date、G-Date等?好吧,我想我现在已经弄明白了。在Python中执行此操作当然比尝试处理MySQL查询以获得我想要的要容易得多。非常感谢。有一件事我有点麻烦,就是日期没有按正确的顺序显示。他们从07-14到07-11,而不是07-11到07-14。我知道Python字典没有排序,所以现在我需要研究如何正确排序日期。
{% for record in results %}
  <tr>
    <td>{{ record['date'] }}</td>
    <td>{{ record['total'] }}</td>
    <td>{{ record['success'] }}</td>
    <td>{{ record['fail'] }}</td>
    <td>{{ record['pending'] }}</td>
  </tr>
{% endfor %}