UPDATE обновляет все записи (строки) вместо одной
Есть таблица users с полями userid с типом данных TEXT и message с типом данных INT.
И есть бот который читает сообщения в чате и с каждым новым сообщением добавляет в поле message +1 к значению.
db = sqlite3.connect("messages.db")
sql = db.cursor()
sql.execute("CREATE TABLE IF NOT EXISTS users (userid TEXT, message INT)")
db.commit()
class Bot:
def message_count(self, userid):
sql.execute("SELECT COUNT(userid) FROM users WHERE userid=(?)", (userid,))
for value in sql:
if value[0] == 0:
sql.execute("INSERT INTO users VALUES (?, ?)", (userid, 1))
db.commit()
else:
sql.execute("UPDATE users SET message = message+1")
db.commit()
Проблема в том, что sql.execute("UPDATE users SET message = message+1"), при каждом новом сообщении добавляет +1 всем пользователям в таблице, а не только тому, кто это сообщение написал.
Ответы (1 шт):
Если в SQL операции обновления таблицы (UPDATE tab_name ...) не указать условие выбора записей - WHERE ... , то данная операция применится ко всем строкам таблицы tab_name. Именно это и происходит в вашем случае.
Поэтому, укажите условие выбора записей для UPDATE при помощи предиката WHERE ...:
sql.execute("UPDATE users SET message = message + 1 WHERE userid = ?", (userid,))