Как в питон сделать так, чтобы в sqlite3 не было отрицательных чисел при изменении значения

Как в питон сделать так, чтобы в sqlite3 не было отрицательных чисел при изменении значения(проверку)введите сюда описание изображения

код:

@slash.slash(
    name="takecash",
    description="- вычесть количество ар",
    guild_ids=[924384808187093032],
    options=[
        create_option(
            name="member",
            description="пользователь",
            required=True,
            option_type=6,
        ),
        create_option(
            name="amount",
            description="количество аров",
            required=True,
            option_type=10,
        ),
    ]
)

@commands.has_any_role(971817475543035975)
async def takecash(ctx, member: discord.Member, amount:str):
    if amount < 1:
        await ctx.send(f"**{ctx.author}**, укажите сумму больше 1")
    else:
        cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(amount, member.id))
        connection.commit()

Ответы (4 шт):

Автор решения: Pavel.img

Как вариант, если пользователю не надо сообщать о превышении значения -

cursor.execute(f"UPDATE users SET cash = cash - {amount} WHERE id = {member.id} AND cash - {amount} > 0"
→ Ссылка
Автор решения: Alpensin

На уровне БД можно добавить

ALTER TABLE USERS
   ADD CONSTRAINT checkCashIsPositive CHECK(CASH >= 0);

тогда БД не позволит ввести такое значение, выбросив исключение.

→ Ссылка
Автор решения: Namerek

Если прям наглядно, то можно вот так:

Такое решение даст возможность корректно обработать кейс (отправить сообщение пользователю, заблокировать аккаунт и т.д. и т.п.) не вызывая исключений в программе

from pathlib import Path
from sqlite3 import connect

conn = connect(Path('test.sqlite'))

cur = conn.cursor()
conn.execute(
    """
        create table if not exists test
    (
        key integer primary key ,
        val integer
    );
    """
)
cur.execute(
    """
    insert into test (key, val) VALUES (1, 150) 
      on conflict (key) do update set val = excluded.val;
    """
)
conn.commit()

for _ in range(20):
    cur.execute(
        """
        update test set val = val - ? where key = ? returning val;
        """, [
            20,
            1
        ]
    )
    val, = cur.fetchone()
    if val >= 0:
        print(val)
        conn.commit()
        continue
    else:
        print('do something')
        conn.rollback()
        break

cur.execute(
    """
    select val from test where key = ?;
    """, [1]
)
val, = cur.fetchone()
print(
    f'check val in db `{val = }`'
)


# 130
# 110
# 90
# 70
# 50
# 30
# 10
# do something
# check val in db `val = 10`

→ Ссылка
Автор решения: MayorLeon19

Решено: делаем переменную типа

member_cash = cursor.execute("SELECT cash FROM users WHERE id = {}".format(member.id)).fetchone()[0]

и потом

if amount > member_cash:
  print('err')
else:
  print('pass')
→ Ссылка