Возвращать строки, измененные в последовательности 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() и получить результат, как любой другой запрос с одним результатом.

Другие вопросы по тегам