Оператор обновления SQL в Flask

#python #sql #sqlite

#питон #sql #sqlite

Вопрос:

Этот фрагмент кода не работает, и я не смог понять, почему:

 db = get_db()
done = "1"
db.execute(
   'UPDATE post'
   'SET payment = (?)'
   'WHERE unique_id = (?)',
   (done, unique_id)
)
db.commit()
 

Это выдает мне эту ошибку:

Файл «/mnt/c/Users/Uvo/Desktop/JobApp/main_page.py «, строка 163, в stripe_webhook (готово, unique_id) sqlite3.OperationalError: рядом с «платежом»: синтаксическая ошибка

Я перепробовал много разных вещей, но безуспешно.

Ответ №1:

Используя SQLAlchemy, это должно сработать:

 db = get_db()
done = "1"
db.execute(
   'UPDATE post '
   'SET payment =:payment '
   'WHERE unique_id =:unique_id',
   payment=done, unique_id=12345)
)
db.commit()
 

Обратите внимание, что столбец оплаты будет содержать запись «1». Если это должен быть идентификатор, пожалуйста, измените 12345 соответствующим образом:

 db = get_db()
db.execute(
   'UPDATE post '
   'SET payment =:payment '
   'WHERE unique_id =:unique_id',
   payment='done', unique_id=1)
)
db.commit()
 

Комментарии:

1. Есть ли способ без использования SQLAlchemy и использования стандартного синтаксиса sqlite3?

2. И, кстати, в вашем примере есть дополнительная скобка. К сожалению, я безуспешно попробовал ваш ответ (я получаю это сообщение об ошибке: «TypeError: execute() не принимает аргументов ключевого слова»). В любом случае спасибо за ваше время.

Ответ №2:

Наконец-то я сам нашел простое решение: написать SQL-запрос в той же строке.

 db = get_db()
db.execute('UPDATE post SET payment = "1" WHERE unique_id = (?)',
(unique_id,)
)
db.commit()