Выбор меньше / выше чем в sqlite3 - PullRequest
0 голосов
/ 13 января 2020

Я хотел бы вставить данные в новую таблицу, где AmountSpent в tblFinance для CategoryID '?' это <бюджет в tblCategory, который связан с идентификатором </p>

, например, если AmountSpent = 1000, CategoryID = 1 CategoryBudget = 900, вставить суммы, потраченные в tblExpRptOver, и, если он меньше, чем бюджет, вставить в tblExpRptUnder. Я пробовал то, что, как мне показалось, должно работать, но оно выдает мне эту ошибку:

 line 613, in test
    'CategoryID = ? AND AmountSpent < ? ', (category_input, budget_input, ))
sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.

Код, который я пытаюсь выполнить:

view_avg = input("Would you like to view the averages for under/over expenses for a specific category? Y/N \n")
if view_avg == "Y":
    category_input = input("Please input the CategoryID for the category you'd like to view the averages for:"
                           "\n")
    budget_input = ('SELECT CategoryBudget FROM tblCategory WHERE CategoryID = ?', (category_input, ))
    c.execute('INSERT INTO tblExpOver SELECT CategoryID, AmountSpent FROM tblExpRptMonth WHERE '
              'CategoryID = ? AND AmountSpent < ? ', (category_input, budget_input, ))
    c.execute('INSERT INTO tblExpUnder SELECT CategoryID, AmountSpent FROM tblExpRptMonth WHERE '
              'CategoryID = ? AND AmountSpent > ? ', (category_input, budget_input,))
    df_avg_over = pd.read_sql_query("SELECT * FROM tblExpOver", conn)
    df_avg_under = pd.read_sql_query("SELECT * FROM tblExpUnder", conn)
    with PdfPages('GraphByMonth.pdf') as pdf:

        firstPage = plt.figure(figsize=(11.69, 8.27))
        firstPage.clf()
        txt = 'Average Expense on Over Expenses for Category ', category_input, ':',\
              df_avg_over["AmountSpent"].mean()
        txt1 = 'Average Expense on Under Expenses for Category ', category_input, ':', \
               df_avg_under["AmountSpent"].mean()

        firstPage.text(0.5, 0.5, txt, txt1, transform=firstPage.transFigure, size=24, ha="center")
        pdf.savefig()
        plt.close()

        fig = plt.figure(figsize=(11.69, 8.27))
        df2.plot(kind='bar')
        plt.title('Expense Graph by Month')
        txt = 'Month Expense Graph'
        plt.text(0.05, 0.95, txt, transform=fig.transFigure, size=24)
        plt.xlabel("Expense Number")
        plt.ylabel("Amount Spent")
        pdf.savefig()
        plt.close()
    menu()

Любая помощь приветствуется! РЕДАКТИРОВАТЬ: CategoryBudget хранится в другой таблице для информации о категории - tblCategory.

1 Ответ

1 голос
/ 13 января 2020

Вы никогда не выполняете запрос budget_input. Вы не можете использовать заполнитель для запроса SELECT.

Вместо того, чтобы делать отдельный запрос, вы должны присоединиться к таблице tblCategory в запросе INSERT ... SELECT.

c.execute('''INSERT INTO tblExpOver 
            SELECT r.CategoryID, r.AmountSpent 
            FROM tblExpRptMonth AS r
            JOIN tblCategory AS c ON r.CategoryId = c.CategoryId AND r.AmountSpent < c.CategoryBudget
            WHERE r.CategoryID = ?''', (category_input,))
c.execute('''INSERT INTO tblExpUnder 
            SELECT r.CategoryID, r.AmountSpent 
            FROM tblExpRptMonth AS r
            JOIN tblCategory AS c ON r.CategoryId = c.CategoryId AND r.AmountSpent > c.CategoryBudget
            WHERE r.CategoryID = ?''', (category_input,))

Обратите внимание, что вы никогда не вставляете ничего для строк, которые в точности равны бюджетной сумме. Если это не преднамеренно, вы должны изменить < или > на <= или >=, в зависимости от того, к какой категории вы хотите, чтобы они были.

Кроме того, похоже, что у вас может быть < и > в обратном направлении, если имена таблиц Over и Under означают, что расходы больше и меньше, чем заложенная в бюджет сумма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...