Ответы пользователя по тегу SQLite
  • Sqlite3.OperationalError: no such table: per?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    0.Спасибо за токен.
    1.Зачем вы создаете второе подключение к базе, не закрыв первое, и зачем тогда после этого снова используете первое? (подозреваю проблема именно в этом)
    2.Ну вы же в курсе про подстановку значений, так зачем пихаете в код f-строки?
    3.Как заметили в кометах, вы правда думаете, что не зная, как работать со структурами данных, уже готовы заниматься ботошлепством?
    Ответ написан
    Комментировать
  • Как правильно настроить таблицу SQLite3 для принятия заказов?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Общая схема будет выглядеть так:
    Пример
    62f7d5d942466316372175.jpeg

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

    Если я правильно понял - вы имеете в виду количество доступных товаров "на складе". Глобально варианта 2:
    • Храните количество в таблице "товары". Просто в реализации, но сильно ограничивает возможности.
    • Создайте отдельную таблицу для учета "прихода товаров" и считайте текущее количество по формуле:
      кол-во пришедшего товара - кол-во проданного

    UPD: На мой взгляд, если вы уж решили вести учет товара, второй вариант, при правильной реализации (не только схемы как таковой, но и логики взаимодействия с такой схемой), лучше, но в целом - не необходим.
    Ответ написан
  • Python sqlite3 как избежать ошибку?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Для подстановки - используйте методы, описанные в документации к модулю sqlite а не форматирование.
    Ответ написан
    4 комментария
  • Как получить последний элемент столбца?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    В sql нет понятия первый/последний. Есть понятие сортировки по определенному параметру, ограничение количества получаемых строк и соответствующие методы получения строк в модуле.
    Все это является основами работы с БД и вам стоит самому в этом разобраться c помощью учебника по sql/документации по модулю sqlite (именно документация, не видосы на ютубе. Максимум статьи/w3school) - там очень много примеров.
    Ответ написан
    Комментировать
  • Как решить ошибку sqlite Incorrect number of bindings supplied?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Вторым параметром execute должен быть кортеж, о чем, кстати, сказано в доках.
    Ответ написан
  • Как сделать баланс пользователя aiogram sqlite3 (Telegram бот)?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    • Создаете таблицу/таблицы с нужной структурой.
    • Пишите код для нужных команд и sql-запросы к базе
    • Готово.


    Предвосхищая вопрос дать примеры

    Здесь вам не фриланс. За вас никто ничего писать не будет. Равно как и не система онлайн-курсов, на которой вам помогут выучить основы. Учите, пытайтесь сами, а сюда приходите с конкретными проблемами
    Ответ написан
    2 комментария
  • Как решить проблему с 'sqlite3.Connection' object has no attribute 'user_exists'?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    db = sqlite3.connect('daatabase.db')
    Давайте думать логически. Вы создали "тупое" подключение к базе. И далее: db.user_exists(message.from_user.id) вы пытаетесь вызвать у этого подключения метод user_exists.
    Смотря на код в целом - понятно, что данный метод должен проверять наличие юзера в базе. Далее вопрос - откуда встроенная в python библиотека может знать о каких бы то ни было юзерах из внешней системы и сторонней библиотеки для работы с ней?
    Ответ написан
  • Ошибка sqlite3.IntegrityError: UNIQUE constraint failed: order_id.ID. Как исправить?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Если я не ошибаюсь, то ошибку можно исправить переписав код без использования F-строк, но давненько не работал с SQLite3 и не помню как это сделать.

    C помощью подстановочных значений. О том как это сделать - смотрите в документации там куча примеров.
    Что касательно ошибки - значение поля id не может повторяться, но вы пытаетесь добавить уже существующее значение. Чаще всего, и ваш случай не исключение, как я понял, уникальными делаю первичные ключи (они-же id`шники). В таких случаях их делают авто-иникрементируемыми и при добавлении данных данное поле пропускают, указывая только нужные поля (примеры тут в главе посвященной собственно insert).
    Ответ написан
    Комментировать
  • Как сделать 2 условия в sqllite python?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Это нужно делать на уровне sql запросов. Как? Для начала - просто изучите sql. То, что вам надо - буквально основы, описанные в первых разделах. Без их знания будет очень сложно.
    Ответ написан
    2 комментария
  • Как сделать таймер на бд sqlite3?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Как сделать таймер на бд sqlite3?

    sqlite3, как и любая другая база данных, просто хранилище данных. Как уже сказали в комментариях - реализовывать нужно средствами языка.
    Самый простой и наименее затратный с точки зрения ресурсов, вариант - высчитывать добытый уголь при проверке баланса.
    В общих чертах схема следующая:
    юзер "покупает шахту" (т.е. начинает игру), в базу записывается дата и время.
    При вводе соответствующей команды (например /склад) из базы берется время последнего обращения (для только-что начавших - пусть это будет время "покупки") и сравнивается с текущим. На основе количества пройдённых часов увеличивается баланс.
    При этом актуализировать баланс нужно будет не только при "проверке" пользователем но и как минимум при расходных операциях, учитывайте это.

    Второй вариант - используйте модули shelude / aioschedule (для синхронных/асинхронных ботов, соответственно). для ежечасного обновления. Однако учитывайте, что это потребует большего количества ресурсов.
    Ответ написан
    1 комментарий
  • Пишу бота для телеграм (telebot), проблема с асинхронными функциями. В чем причина ошибки?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Если вы дадите какие-то совесть по оформлению или синтаксу кода, я буду вам нереально благодарен.

    Мне вот интересно, вы ищите "советы" по каким-то вещам... Почему вам даже не приходит в голову поискать в офф.документации?
    Как правильно писать то, что вы пытаетесь сделать там описано.
    я тот же sqlite выучил за 1 день

    Не очень похоже. То, что вы посмотрели, уж извините, говноролик* по типу "хреначим бота из палок и ..." не значит, что вы изучили что-то.
    Конкретно - проблема в подобных выражениях:
    cursor.execute(f"INSERT INTO {table}({columns}) VALUES ({values})")

    Писать что-то подобное, тем-более в системе, с которая будет доступна другим людям в интернете можно только в случаях, когда вы целенаправленно хотите словить sql-инъекцию.
    Изучайте основы по документации. По крайней мере какие-то базовые вещи там описаны максимально подробно и даже если вдруг не знаете английский - примеров столько, что даже без чтения понятно.
    --
    * - тут больше вопрос к автору сего творения, который мало-того, что сам не пойми как учится, так еще и путает других.
    Ответ написан
    1 комментарий
  • Ошибка создании таблицы в SQLLite3 Python. В чем причина?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Проблема в порядке определения полей/ограничений - sql требует строгого порядка:
    1. определение полей
    2. определение ограничений (опционально)
    3. определение внешних ключей

    Т.е. сперва описываете все поля и только после - указываете блоки FOREIGN KEY
    Ответ написан
    1 комментарий
  • Почему не видит глобальную переменную?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    1.Ну, global base, cur вы указали. Но чтобы они работали, объявлять их нужно перед всеми функциями.
    2.Не стоит подобным образом подключаться к базе. Если нет каких-то особых требований (а я более чем уверен, что их нет), лучше каждый раз создавать новое подключение, после чего закрывать его (или использовать контекстный менеджер)
    Ответ написан
    3 комментария
  • SQLITE Discord.py почему при заносе в бд он разделяется по 1 символу?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Ну, я бы советовал быть внимательнее.
    Вы же сами вызываете метод для выполнения нескольких запросов:
    cursor.executemany

    Обычно в него передают словарь/кортеж, но в теории ничто не мешает ему пройтись по строке, поочередно подставляя по одной букве.
    Ответ написан
  • Как проверить слово, которое пользователь написал в сообщении в телеграме, на наличие его в базе данных?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    слово, которое пользователь написал в сообщении в телеграме

    yes = sql.execute("""SELECT word FROM words WHERE length <= 6""")

    Где в указанном запросе подставлено соответствующее слово?
    Нигде. Сейчас запрос просто выбирает все слова, длинна которых меньше или равна шести символам и выдает первое.
    Подставьте его в запрос способном описанным в документации
    Ответ написан
    Комментировать
  • Почему пишет no such table users?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    По теме вопроса:
    Таблица, судя по всему, должна создается в момент запуска бота, но при этом перед выполнением скрипта, вы разместили бесконечный цикл, изменяющий статус бота.
    Собственно, риторический вопрос: когда, при последовательном выполнении кода, запустится функция, идущая сразу за циклом, не имеющим условия для выхода?
    @bot.event
    async def on_ready():
        while True:
            await bot.change_presence(status=discord.Status.online, activity=discord.Game("=command"))
        print(f"{bot.user} is connected!")
        cursor.execute("""CREATE TABLE IF NOT EXISTS users (
                       name TEXT,
                       id INT,
                       cash BIGINT,
                       rep Int,
                       lvl  INT""")

    Ну и как дополнение:
    Подобное формирование запросов в корне неверно по двум причинам:
    • Куда проще словить ошибку в итоговом sql-запросе.
    • SQL-инъекции

    Корректные методы описаны в документации
    Ответ написан
    Комментировать
  • Как из базы данных выбрать данные и отправить на почту?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    1.Выбираете нужные данные.
    2.Форматируете согласно требованиям
    3.Шлете через smtplib
    4.profit
    Ответ написан
    2 комментария
  • Редактирование ячеек таблицы HTML и обновление базы sqlite3?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Процесс сохранения в базу имеет 2 взаимосвязанных части:
    • клиентская, которая обрабатывает ввод данных пользователем, сериализирует введенные данные данные (по факту - приводит к одному из стандартов, например json), после чего отправляет данные на сервер.
    • Серверная часть получает данные, если нужно как-то их обрабатывает, после чего сохраняет в базу.

    Судя по коду (с js`ом я, увы, на вы) при вводе символа в ячейку, ее содержимое отправляется post-запросом по определенному адресу.
    Как этот запрос обрабатывается на сервере - непонятно, т.к. код вы не привели. В общем случае, это должно происходить так:
    1. Валидируются данные
    2. Происходит подключение к базе
    3. Данные подставляются в запрос (подготовленные запросы, PDO (актуально для php, указанного в тегах) или orm)
    4. Запрос выполняется
    5. При необходимости отдается ответ клиенту

    P.S. К тому же, непонятно как вы определяете, какие данные нужно изменить. Чтобы изменить запись в базе нужно указать какую именно запись вы собираетесь изменить (например с помощью id или какого-то другого уникального поля). При этом, поскольку вы отправляете только одну ячейку, сделать это невозможно, поскольку поле может содержать неуникальные значения по типу цены (абстрактный пример), которая может быть одинаковой для разных товаров.
    Ответ написан
    2 комментария
  • Как добавить значение дб в sql?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    А с какой целью вы, собственно, добавляйте where? Insert служит для создания новых записей в базе и иметь условий связанных с существующими данными не может чисто логически.
    Если нужно обновить значение, используете update.
    Ответ написан
    Комментировать
  • Sqlite3 Ошибка?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    В доках сказано:
    fetchone()
    Fetches the next row of a query result set, returning a single sequence, or None when no more data is available.

    Строку какого запроса должен "приносить" s = cursor.fetchone()[0] в вашей функции?
    Откройте доки и почитайте, как нужно выполнять запросы.
    Ответ написан
    1 комментарий