Как удалить одно значение, а не все данные о пользователе?
@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()