【问题标题】:Python sqlite3 - sorting table by day of the week columnPython sqlite3 - 按星期几列排序表
【发布时间】:2018-07-14 03:53:18
【问题描述】:

我有一个表格,其中一个列的条目有不同的日期(星期一、星期二、星期三等),我想按天组织我的表格,以便该列的星期一的行首先跟随剩下的日子。

我目前的功能是:

import sqlite3
from tabulate import tabulate
conn = sqlite3.connect("Table.db")
c = conn.cursor()

def order_by_day():
    days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    with conn:
        for i in days:
            data = c.execute("SELECT * FROM Table_name WHERE Day_column=?", (i,))
            print(tabulate(data, headers="keys", tablefmt="grid", stralign='center', numalign='center'))

此函数有效,但它为一周中的每一天创建 7 个单独的表,而不是一个表(print(tabulate()) 函数使表整洁有序,而不是如果我使用 fetchall(),所以我的表看起来像以下)。

+--------+---------------+-------------+
|  Col1  |      Col2     | Day_column  |
+========+===============+=============+

有什么方法可以修改我的函数,以便它创建一个包含我所有按天组织的数据的表,而不是每天创建 7 个单独的表?

【问题讨论】:

  • 你的意思是tabulate函数?
  • 您应该修改您的 sql 查询,使其不仅仅选择特定日期。那么你就不需要for i in days:循环

标签: python python-3.x sqlite


【解决方案1】:

要在一个输出中打印所有内容,您可以尝试

import sqlite3
from tabulate import tabulate
conn = sqlite3.connect("Table.db")
c = conn.cursor()

def order_by_day():
    with conn:
        data = c.execute("SELECT * FROM Table_name ORDER BY Day_column")
        print(tabulate(data, headers="keys", tablefmt="grid", stralign='center', numalign='center'))

我发现的另一个语法from this question

import sqlite3
from tabulate import tabulate
conn = sqlite3.connect("Table.db")
c = conn.cursor()

def order_by_day():
    with conn:
        data = c.execute("""SELECT * FROM Table_name ORDER BY Day_column CASE 
                                                                         WHEN Day_column='Monday' THEN 1
                                                                         WHEN Day_column='Tuesday' THEN 2                                                                             
                                                                         WHEN Day_column='Wednesday' THEN 3
                                                                         WHEN Day_column='Thursday' THEN 4
                                                                         WHEN Day_column='Friday' THEN 5
                                                                         WHEN Day_column='Saturday' THEN 6
                                                                         WHEN Day_column='Sunday' THEN 7
                                                                         END""")
        print(tabulate(data.fetchall(), headers="keys", tablefmt="grid", stralign='center', numalign='center'))

【讨论】:

  • 有没有办法使用 ORDER BY 让它按一定的顺序排列?你的方式按字母顺序排列(所以星期五,星期一,星期六,星期日,星期四,星期二,星期三),但我想按星期几的顺序排列。我最初打算使用该方法,但我找不到任何可以让我按照我想要的方式订购它的东西(除了在每天添加数字,例如 1 - 星期一、2 - 星期二等并订购它按数字降序排列)。
【解决方案2】:

我想出了如何正确订购并让它显示为一张桌子。如图所示,我按星期几手动订购。

import sqlite3
from tabulate import tabulate
conn = sqlite3.connect("Table.db")
c = conn.cursor()

def order_by_day():
    with conn:
        data = c.execute("""SELECT * FROM Table_name ORDER BY Day_column='Monday'    DESC,
                                                              Day_column='Tuesday'   DESC,
                                                              Day_column='Wednesday' DESC,
                                                              Day_column='Thursday'  DESC,
                                                              Day_column='Friday'    DESC,
                                                              Day_column='Saturday'  DESC,
                                                              Day_column='Sunday'    DESC""")
        print(tabulate(data, headers="keys", tablefmt="grid", stralign='center', numalign='center'))

我确信有更好的订购方式,但我认为这种方式对我来说很好。

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 2016-05-31
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2021-12-19
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多