Python sqlite3-按星期几对表进行排序

时间:2018-07-13 17:30:27

标签: python python-3.x sqlite

我有一个表,其中的一列中有不同的日期(星期一,星期二,星期三等),并且我想按天组织我的表,以便该列的星期一所在的行先跟在后面剩下的日子。

我到目前为止拥有的功能是:

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个单独的表?

2 个答案:

答案 0 :(得分: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'))

答案 1 :(得分: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='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'))

我确定有更好的订购方法,但是我认为这样对我来说很好。