Какую базу данных нужно использовать для телеграмм бота?
Я создаю телеграмм-бота на python telebot с помощью базы данных Sqlite, направленный на покупку определённых товаров и я в этом новичок.
В самом боте уже есть корзина, которая отлично работает. Но есть очень важный нюанс.
Когда в первый раз запускаешь программу, то корзина работает без ошибок, то есть при добавления товара в корзину, этот же товар добавляется в базу данных, с удалением ситуация тоже правильная.
А вот на второй раз возникает проблема. Когда данные о пользователях сохраняются в БД, то при добавление товаров в корзину и удаление товаров из корзины, программа как бы делает корзину одного пользователя доступный для другого, и возникает такая ситуация: если у первого пользователя в корзине есть Товар 1 и Товар 2, и если у второго пользователя в корзине Товар 3, то первый пользователь получит возможность удалить Товар 3.
И я бы хотел узнать, может быть это как-то связано с базой данной, которую я использую?
Можно использовать хоть гугл таблицы, просто сделай поле, по которому будешь фильтровать записи и удалять. Можно взять телеграм айди, например и давать возможность удалять итд только при наличии у записи такой метки.
Иными словами, должно быть уникальное поле для каждого клиента, по которому нужно фильтровать
Chatbotist, именно такой логике я придерживаюсь.
У действительно создал такое уникальное поле, и по моей задумке, всё должно работать идеально, он всё равно что-то не то.
Я сейчас думаю над тем, как это исправить, и одна идея появилась. Если реализую её, то отпишусь.
Спасибо за советы!
Очень сложно дать конкретный совет не зная код или хотя бы структуру БД. По сути у вас должна быть проверка что именно этот пользователь имеет отступ к этим товарам, самый простой способ это чат айди (message.chat.id) это уникальный модификатор чата, и что этот айди имеет доступ к своей корзине.
guselnikov, Я могу описать как именно это происходит.
Когда пользователь нажимает кнопку Start, вызывается функция, которая проверяет, есть ли текущий ID пользователя в таблице. Если в таблице ID пользователя нет, то это значит, что он зашёл в бота впервые, значит, для него создаётся отдельная строчка с его данными.
Однако, если в таблице есть ID пользователя, то значит, что он зашёл в бота не в первый раз, а значит, у него есть своя уникальная корзина. Программа находит эту корзину и присваивает пустой корзине пользователя корзину из таблицы.
В общем как-то так.
Но у меня есть очень важный вопрос. Смотрите, я реализовывал товар и корзину через классы. То есть товары являются экземплярами класса Товар, а корзина является экземпляром класса Корзина. Так вот я думаю, что может в этом и ошибка. То есть из-за классов начинается путаница с товарами, а я об этом просто не знаю. Может быть, Вы знаете что-то на этот счёт?
Moskaa, если у вас для каждого клиента СВОЯ корзина и она НИ КАК НЕ ПЕРЕСЕКАЕТСЯ с другими картинами - таких проблем у вас быть не должно.
Насчет классов: а для чего иметь классы товаров и корзин? Товары как правило записаны в БД
Айди,название,описание,цена и все эти данные берутся из БД запросом который выполняется за мгновение.
guselnikov, а так можно?? Просто получается, что у меня товары не записаны в БД. У меня получается так, что БД берёт данные пользователе и товаре из кода. Просто как раз все перечисленные характеристики(кроме ID и цены) у меня есть в коде, а не в БД. А в БД у меня сохраняются данные о пользователе, взятые из кода.
Ну, как я понял, я что-то не так сделал, да?
Использовать можно любую БД. То, что у вас проблема с корзиной товаров разных пользователей - это ошибка в логике вашего кода. Берёте бумажку, ручку и рисуете нужный алгоритм работы, прорабатываете его, делаете декомпозицию до самых простых элементов и исправляете в вашем приложении.
С БД не связано, связано с логикой работы приложения. следует сохранять не только данные в корзину но и ID пользователя. и давать управлять только данными этого пользователя.
Ratenti, в каждом телеграмм боте должен использоваться FSM, я сам сталкивался с такой проблемой, что у меня покупки пользователя уходили другому пользователю, благо тогда бот не был таким популярным и другие "приколы" были
setupx, странно, какие гайды я не смотрел, я впервые слышу такое. Но судя по тому, что это, как оно устроено и зачем оно, FSM действительно нужен, но он сложный ппц(
Почитай какие бывают связи (отношения) между таблицами в реляционных базах и подумай как тебе связать корзину, пользователя и товары. Наверняка можно нагуглить и готовые схемы-примеры.
Если Вам нужно решить проблему здесь и сейчас - Вы можете использовать ИИ. Отправляете код целиком в ChatGPT (нужен vpn для работы) или в DeepSeek. И описываете ему проблему так же как описали нам. После чего просите исправить код с пояснениями где исправлено и почему
Смотрите, я заранее создал БД с колонками с примерно теми же параметрами. Создал я её не в коде, а отдельно, однако всё равно не помогает(
Всё равно спасибо!