@timka228

Как сделать замену определенный значений в БД sqlite3 на Python 3?

Есть база данных пользователей на sqlite3, и есть скрипт на Python 3, который работает с этой БД. Мне нужно, чтобы скрипт заменил определенные значения у всех пользователей (строках) в определенном столбце на другое. Т.е., к примеру, есть n-ое количество пользователей (строк), есть столбец состояния, и для каждого пользователя это состояние может быть blocked либо normal. У кого-то оно blocked, у кого-то normal. А скрипт должен перебрать всех пользователей (все строки по столбцу состояния), и у тех, у кого было состояние blocked, заменить на normal. И еще мне нужна информация всей строки, где происходит замена, чтобы скрипт мог отправить сообщение пользователю об изменении его состояния.
Прошу помочь с этим, пожалуйста. Как сделать перебор строк и поиск нужных?
  • Вопрос задан
  • 2672 просмотра
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Играйтесь:
import sqlite3

conn = sqlite3.connect('users.db')
cursor = conn.cursor()

cursor.execute('''CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT,
                                                    user_name TEXT,
                                                    user_id TEXT,
                                                    user_status TEXT
                                                )''')

cursor.execute('DELETE FROM users')

users = [[None,'Валера','123','blocked'],
        [None,'Тарас','134','blocked'],
        [None,'Степан','145','normal'],
        [None,'Абдурахман','168','blocked'],
        [None,'Петя','190','normal']]

for user in users:
    cursor.execute('INSERT INTO users VALUES(?,?,?,?)',user) # Заполняем таблицу из списка
conn.commit()

result = cursor.execute('SELECT id,user_id FROM users WHERE user_status="blocked"').fetchall()
# Выбираем из базы id(порядковый номер пользователя в базе), user_id - id пользователя в вашей системе только тех пользователей,
# в которыъ статус blocked

for x in result: # перебираем результаты
    id,user_id = x # Распаковываем кортеж
    cursor.execute('UPDATE users SET user_status=? WHERE id=?',('normal',id)) # обновляем записи в таблице.
    # Так как у нас есть порядковый номер пользователя в таблице(id), то обновляем записи этих id и устанавливаем
    #  user_status в normal
    print(f'Статус blocked изменен на normal для следуещего пользователя {user_id}')

conn.commit()
conn.close()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы