Найти - Пользователи
Полная версия: Изменить данные в БД
Начало » Python для новичков » Изменить данные в БД
1
Yaroslam322
Есть функция, которая принимает на вход два значения: название счета, количество денег, которые надо списать. Счет представляет из себя строку в БД. Проблема заключается в том, что мне выдается ошибка TypeError: unsupported operand type(s) for -=: ‘NoneType’ and ‘int’ Как это исправить?

     def minus_money_on_acc(self, summ, account_name): #редактирование счета
        current_money = self.a.execute('''SELECT money FROM account WHERE name = ?''', (account_name,)).fetchone()
        current_money -= int(summ)
        self.a.execute('''UPDATE account SET money = ? WHERE name = ?''', (current_money,account_name))
        self.account.commit()

Пробовал еще делать так, но тогда просто ничего не происходит

    def minus_money_on_acc(self, summ, account_name): #редактирование счета
        self.a.execute('''UPDATE account SET money = money - ? WHERE name = ?''', (summ,account_name))
        self.account.commit()
Striver
что мне выдается ошибка TypeError: unsupported operand type(s) for -=: ‘NoneType’ and ‘int’ Как это исправить?
Судя по всему это происходит в строке
 current_money -= int(summ)
т.е. в базе нет ничего (None), а ты от этого ничего пытаешься отнимать некую summ.
Видимо надо писать как-то так:
      def minus_money_on_acc(self, summ, account_name): #редактирование счета
        current_money = self.a.execute('''SELECT money FROM account WHERE name = ?''', (account_name,)).fetchone()
        try:
            current_money -= int(summ)
            self.a.execute('''UPDATE account SET money = ? WHERE name = ?''', (current_money,account_name))
            self.account.commit()
        except TypeError:
            pass
Ну или вместо pass присваивать туда некое значение (например, 0).
FishHook
Striver
Видимо надо писать как-то так:
Так не надо писать никогда.
Управление потоком выполнения программы с помощью try/except - практика убогая.
Yaroslam322
Striver
Проблема в том, что в базе есть записи и я вполне себе могу их вывести
Rafik
Надо самому себе ответить на вопрос: “Откуда в строке current_money -= int(summ) берётся summ”?
Далее в настройках таблицы включить значение по умолчанию “ноль” для этой колонки и запретить значения типа Null.
Если нет возможности внести правки в БД, то необходимо проверять полученное значение summ на None, до выполнения суммирования, и присваивать переменной 0, если его значение None или пропускать суммирование.
Yaroslam322
Проблема решилась сама собой. Во-первых, я не правильно вставлял данные при вызове функции. Во-вторых, .fetchone() возвращает тип tuple, который не может менять свои значения.

Вот правильный код

     def minus_money_on_acc(self, summ, account_name): #редактирование счета
        self.a.execute('''UPDATE account SET money = money - ? WHERE name = ?''', (summ, account_name))
        self.account.commit()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB