SQLAlchemy (Python) / Sequelize (Node.js) откат транзакции (кнопка отмены) - PullRequest
0 голосов
/ 18 февраля 2020

Итак, сейчас я разрабатываю бэкэнд-API с использованием GraphQL и Python с SQLAlchemy или Node.js с Sequelize, чтобы записать все данные в базу данных SQLite.

Я до сих пор не уверен, какой бэкэнд Я в конечном итоге. Возможно, этот вопрос и ответ на мой вопрос приведут меня к использованию одного или другого.

Так что в моем приложении будет функция, в которую вы добавляете броски дротиков (например, двойные 20, тройные 19, ...) в стол с бросками. В зависимости от выбранной игры и выбранных условий, этот бросок будет либо вычитаться из общего количества, либо добавляться в таблицу счетчиков или что-то в этом роде.

Каждый раз, когда добавляется бросок, будет проверяться, будет ли игра выиграл и некоторые другие чеки. Они также могут записывать (фиксировать) данные в базу данных.

Теперь, если пользователь введет неправильный номер / или автомат c darts обнаружит неправильный номер броска (неисправность), происходит выброс и несколько измененных данных в базе данных, которые мне придется откатить.

В приложениях для игры в дартс вы найдете в магазине приложений либо ios, либо android, у вас всегда будет кнопка отмены, которая удалит throw из базы данных и все "эффекты", вызванные введением неправильного throw.

Как бывший администратор ms sql, моей первой идеей были журналы транзакций и функция отката. Но после некоторого поиска в net я понимаю, что и SQLAlchemy, и Sequelize будут откатывать транзакции только при исключении.

Могу ли я преднамеренно откатить последнюю "завершенную" транзакцию (то есть все изменения, которые, например, будет выполнять функция) в конце функции) нажатием кнопки / вызовом пути api rest, например '/ undo', и, если да, есть ли фрагменты кода для SQLAlchemy или Sequelize, которого мне не хватает?

С уважением, Патрик

редактировать:

коллекция предоставленных ответов:

  • шаблон команды (python)

1 Ответ

2 голосов
/ 18 февраля 2020

Согласно Можно ли откатить транзакцию, которую я уже совершил? (потеря данных) и других источников, нет, вы не можете откатить совершенную транзакцию. Также это зависит от БД, поэтому не имеет ничего общего с ORM или языком.

Я бы порекомендовал реализовать шаблон Command , который отлично подходит для Undo . Так что в основном делайте возврат из кода, а не из базы данных.

...