Как удалить одно значение, а не все данные о пользователе?

@bot.message_handler(commands=["start"])
def start_message(message):
connect = sqlite3.connect('users09870.db')
cursor = connect.cursor()

cursor.execute("""CREATE TABLE IF NOT EXISTS login_id(
        id INTEGER PRIMARY KEY,
        user_name TEXT NOT NULL UNIQUE,
        last_name TEXT NOT NULL UNIQUE,
        username TEXT NOT NULL UNIQUE,
        city TEXT NOT NULL)""")

connect.commit()

people_id = message.chat.id
user1_name = message.chat.first_name
last_name = message.chat.last_name
username5 = message.chat.username
cursor.execute("""
    SELECT id FROM login_id WHERE id = ?
    UNION
    SELECT user_name FROM login_id WHERE user_name = ?
    UNION
    SELECT last_name FROM login_id WHERE last_name = ? 
    UNION 
    SELECT username FROM login_id WHERE username = ? """,
               (people_id, user1_name, last_name, username5))
data = cursor.fetchone()
if data is None:
    users_id = message.chat.id
    first_name = message.chat.first_name
    last_name1 = message.chat.last_name
    username1 = message.chat.username
    cursor.execute("INSERT INTO login_id VALUES(?, ?, ?, ?, ?);",
                   (users_id, f'{first_name}', f'{last_name1}', f'{username1}', ''))
    connect.commit()
    markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
    btn1 = types.KeyboardButton("Погода?")
    markup.add(btn1)
    bot.send_message(message.chat.id, 'Привет! Введи свой город, чтобы я мог предоставить тебе погоду.', reply_markup=markup)
else:
    bot.send_message(message.chat.id, f'Привет! Я помню тебя. Если ты хочешь изменить город, введи его заново.')
@bot.message_handler(commands=['unsubscribe'])
def delete(message):
connect = sqlite3.connect('users09870.db')
cursor = connect.cursor()

cursor.execute(f"DELETE FROM login_id WHERE city")
connect.commit()
bot.send_message(message.chat.id, 'Город удален!')


@bot.message_handler(commands=["add"])
def get_weather(message):
city = message.text.split(' ', 1)[-1].strip().lower()
city1 = city.title()
connect = sqlite3.connect('users09870.db')
cursor = connect.cursor()

cursor.execute(f"UPDATE login_id SET city = '{city}' WHERE id = {message.chat.id}")
connect.commit()

bot.send_message(message.chat.id, f'Город <b>{city1}</b> записан в базу данных', parse_mode='html')
connect.close()

Помогите сделать удаление только одной строки а не всей информации о пользователе, Есть уже хендлер который сохраняет все данные о пользователи, но когда пользователей хочет поменять город и тут удаляется все данные пользователя и тут путаница пошла, как сделать чтоб удалялось только одна строка? Я вот что-то пытался сделать не получается.


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

Автор решения: CausonQ

Оператор DELETE удаляет строку, которая удовлетворяет условию, указанному после WHERE. Если такогового нет, то будут удалены все записи таблицы.

Если нужно очистить какую-то ячейку, то используйте UPDATE:

UPDATE login_id SET city=null WHERE id=user_id

Так вы установите значение столбца city в NULL, в строке, где id равен user_id

В вашем случае запрос будет следующий:

cursor.execute(f"UPDATE login_id SET city = null WHERE id = ?", (message.chat.id))
connect.commit()
→ Ссылка