Возвращать строки, измененные в последовательности UPDATE
Я пытаюсь вернуть, какие строки используются в моей последовательности UPDATE, чтобы проверить, действительно ли он что-то обновил или пытался обновить несуществующую строку, но у меня возникают проблемы с получением фактических возвращенных строк
Спрашивая друзей и просматривая другие статьи, я пробовал использовать методы, которые они представили, например, используя sqlite3's rowcount
метод, а также оператор RETURNING в функции execute, но оба вызывают AttributeError и SQLError соответственно.
def set_reason(guild: str, warn_id: int, reason):
warns.execute("UPDATE warns SET reason=:reason WHERE id=:id AND server=:guild", {'reason': reason, 'id': warn_id, 'guild': guild})
return warns.fetchone()
Попытка использовать оператор RETURNING:
warns.execute("UPDATE warns SET reason=:reason WHERE id=:id AND server=:guild RETURNING warns.*", {'reason': reason, 'id': warn_id, 'guild': guild})
я получил apsw.SQLError: SQLError: near "RETURNING": syntax error
.
И пытаясь использовать rowcount
метод:
warns.execute("UPDATE warns SET reason=:reason WHERE id=:id AND server=:guild", {'reason': reason, 'id': warn_id, 'guild': guild}).rowcount()
Я получаю AttributeError: apsw.Cursor не имеет атрибута rowcount.
1 ответ
Согласно этой странице документов APSW,changes()
находится в объекте подключения, а не в объекте курсора.
См. Этот ответ для прямого SQL-запроса, чтобы получить ту же информацию. Перейдите по ссылке, чтобы узнать подробнее о функции. Если что-то непонятно, просто выполнитеSELECT changes()
и получить результат, как любой другой запрос с одним результатом.