Saya mencoba membuat entri data tertentu dalam seminggu dipilih, namun, saya tidak yakin bagaimana membuat program saya mengenali tanggal di mana minggu itu akan dimulai dan berakhir. Ini adalah kode saya saat ini untuk fungsi:

elif report_option == "C":
    print("Expense Report by Week: \n")
    year = int(input("Enter the year of the week's expenses you'd like to view (YYYY): \n"))
    month = int(input("Enter the month the week's expenses you'd like to view (MM): \n"))
    day = int(input("Enter the day the week's expenses you'd like to view (DD): \n"))
    date = datetime.date(year, month, day)
    c.execute("SELECT * FROM tblFinance")
    conn.commit()
    for row in c.fetchall():
        print(row)
    categories = []
    amountspent = []

    for row in c.execute('SELECT CategoryID, AmountSpent from tblFinance WHERE FinanceDate=?', (date,)):
        print(row[0])
        print(row[1])
        categories.append(row[0])
        amountspent.append(row[1])

        plt.plot(categories, amountspent, '-')

        plt.ylabel('Amount Spent')
        plt.xlabel('Category ID')
    plt.show()
    menu()

Bantuan apa pun akan dihargai, terima kasih! EDIT: Saya sekarang mencoba membuat fungsi terpisah berfungsi selama sebulan. Namun, fungsi suka tidak berjalan dengan baik untuk saya! Kode untuk fungsi bulan di bawah ini:

elif report_option == "D":
    print("Expense Report by Month: \n")
    month_input = input("Enter the year and month of the month's expenses you'd like to view (YYYY-MM): \n")
    c.execute("SELECT * FROM tblFinance")
    conn.commit()
    for row in c.fetchall():
        print(row)
    categories = []
    amountspent = []

    for row in c.execute('SELECT CategoryID, AmountSpent from tblFinance WHERE FinanceDate LIKE ?',
                         (month_input, )):
        print(row[0])
        print(row[1])
        categories.append(row[0])
        amountspent.append(row[1])

        plt.plot(categories, amountspent, '-')

        plt.ylabel('Amount Spent')
        plt.xlabel('Category ID')
    plt.show()
    menu()
1
Keez 10 Januari 2020, 00:55

3 jawaban

Jawaban Terbaik

Anda bisa mendapatkan tanggal mulai dan akhir minggu dengan Python:

week_start = date - datetime.timedelta(days=date.weekday())
next_week_start = week_start + datetime.timedelta(days=7)

Kemudian jika Anda perlu mendapatkan catatan untuk minggu ini gunakan between dalam kueri:

c.execute('SELECT CategoryID, AmountSpent from tblFinance WHERE FinanceDate BETWEEN ? AND ?', (week_start, next_week_start))

EDIT: Untuk rentang bulan perbarui kode dengan cara ini:

# Leave all the user input the same except you don't need to input day  for month range query
month_start = datetime.date(year, month, 1)
next_month_start = datetime.date(year, (month + 1) % 12, 1)
c.execute('SELECT CategoryID, AmountSpent from tblFinance WHERE FinanceDate BETWEEN ? AND ?', (month_start, next_month_start))
1
Yann 10 Januari 2020, 08:23

Keez saya memposting pertanyaan dan orang-orang tidak ingin menjawab saya dan saya tidak dapat mengirim pesan kepada orang-orang atau saya tidak dapat bergabung dengan obrolan karena saya tidak memiliki perwakilan dan saya tidak dapat memposting pertanyaan jika saya tidak menunggu 3 hari dapatkah saya mengajukan pertanyaan phyton sederhana di sini?

0
ilker 9 Januari 2020, 22:16

Saya mengerti bahwa Anda ingin memfilter pada minggu di mana tanggal yang diberikan oleh pengguna berada.

Di SQLite, Anda dapat menggunakan date(mydate, 'weekday, 0') untuk itu: ini memberi Anda hari pertama dari minggu ini pada tanggal mydate. Kemudian Anda dapat melakukan:

SELECT CategoryID, AmountSpent 
FROM tblFinance 
WHERE FinanceDate >= date(?, 'weekday, 0') AND FinanceDate  < date(?, 'weekday 0', '7 days')

Kedua ? harus diganti dengan nilai input yang sama (tanggal yang diberikan oleh pengguna).

Ekspresi ini menggunakan interval interval setengah terbuka untuk pemfilteran, sehingga akan menangani bagian waktu FinanceDate dengan benar, jika ada.

1
GMB 9 Januari 2020, 22:13