Как генерировать поочерёдные номера для заказов через Telegram-бота?
как реализовать мою задумку:
У меня есть бот, с помощью которого можно оформить заказ. Заказ может формироваться из нескольких позиций (пользователь набирает корзину из нескольких позиций, после чего оформляет заказ). В PostgreSQL данные заказа заносятся следующим образом: 1 строка = 1 позиция корзины. Соответственно, "уникальный номер" заказа я формирую следующим образом: в первой функции, с помощью randint, в диапазоне от 0 до 1000 генерирую рандомный номер, после чего сохраняю его в машину состояний, и далее присваиваю каждой позиции в БД, по мере формирования заказа пользователем. Диапазон не большой потому, что когда заказ выдаётся клиенту - продавец изменяет статус заказа с "готов" на "выдан" с помощью inline-кнопки, и заказ удаляется из БД, опять же по этому "уникальному номеру". И вот в чем вопрос: можно ли генерировать как-то номера поочерёдно? Чтобы сначала шёл заказ №1, затем №2 и т.д.?
Пока писал вопрос - подумал, что можно просто так же в первой функции запрашивать из БД максимальное ID записи, брать от нее "уникальный номер" заказа, далее прибавлять += 1, и присваивать получившийся номер к новому заказу.
igor6130, я думаю это не потребуется, так как заказы оформляются в магазины разливного пива лишь для того, чтобы пользователю (клиенту) заранее налили необходимые напитки
Чтобы реализовать данную задумку, необходимо вместо randint сделать запрос в БД, получить последнюю запись по id, и получить номер заказа у этой последней записи. Далее, прибавить к данному номеру += 1 и присвоить результат в виде номера к новому заказу. Отрывок из кода:
cursor.execute('''SELECT order_number FROM orders WHERE id = (SELECT MAX(id) FROM orders);''')
result = cursor.fetchone()[0]
if result is None:
result = 1
else:
result += 1
order_number = result
await state.update_data(order_number=order_number)