• Почему через psycopg2 не могу получить список таблиц в postgres?

    @o5a
    lisi4ka, это только значит, что у пользователя есть базовый доступ (эти таблицы из базовой схемы pg_catalog). Судя по результатам, у пользователя (под которым логинитесь) нет прав на эти таблицы (если это не администратор/superuser). Раздайте их (grant ...).
    Написано
  • Python requests.post игнорирует данные?

    @o5a
    stasbombit, в документации же четко написано, что обязательны поля: API_ID, API_KEY, shop. У вас же 'api_id'.
    Написано
  • Почему рассылка доходит не до всех пользователей в телеграм боте?

    @o5a
    RED123123, в простейшем случае хотя бы просто не игнорируйте ошибку, а выводите как есть
    except Exception as e:
        print(e)
    Написано
  • Почему бот не запускается?

    @o5a
    deployingseverus, А что именно поменяли? Отразите в коде тогда, если уже изменили. У вас ни хендлеров в текущем коде нет, и запуск бота тоже некорректный.
    async def main():
        bot = Bot(API_TOKEN)
        await dp.start_polling(bot)


    Документация https://docs.aiogram.dev/en/v3.1.1/
    Написано
  • Как подставить значение в запрос sqlite?

    @o5a
    Uadfl, прямым ответом на ваш вопрос будет использовать форматирование строк, например через f-строки, как предложил ниже wincrx, потому что параметризированые запросы (механизм через '?') для подстановки названий идентификаторов в принципе не работает, там только форматировать строку запроса. Просто это в целом не особо правильно делать, и может быть даже опасно, если вы эти названия полей будете не сами жестко контролировать, а брать из ввода пользователя.
    Но если бы объяснили, зачем решили так динамически выбирать названия полей, вам тут могли бы подсказать, как сделать правильно.
    Написано
  • Как подставить значение в запрос sqlite?

    @o5a
    Uadfl, опять же, Вы озвучили свой способ решения, который как тут уже объяснили, выглядит сомнительно в приложении к реляционным БД. А хотелось бы увидеть, зачем изначально вам такое потребовалось, динамически подставлять названия полей.
    Выглядит как очередная Проблема_XY

    Если простыми словами, это как если бы обратились с вопросом:
    - Как мне укрепить микроскоп, а то он быстро выходит из строя
    - *пожав плечами, предлагают решения по укреплению конструкции микроскопа*
    А на самом деле выясняется, что автор вопроса использовал микроскоп, чтобы забивать гвозди, и правильным ответом на подобный вопрос было бы "использовать молоток", а не пытаться укрепить микроскоп.
    Написано
  • Как подставить значение в запрос sqlite?

    @o5a
    Uadfl, изменить свой подход к структуре таблиц. Поля как правило не должны подставляться динамически, при запросе уже известно, какое поле за что отвечает. А что конкретно изменить, не известно, пока не опишете, для чего вам понадобилось динамически выбирать поля, зачем вообще так решили сделать.
    Написано
  • Не находит текст извлечённый с помощью pytesseract в excel?

    @o5a
    Jimm24, насколько вижу, текст на картинке и в ячейках напрямую не соответствует (на картинке еще и имя есть, которого в самом Excel нет). Поэтому и совпадений не находило. Но я так понял с этим уже решили.

    По поводу цикла, хотели, чтобы программа висела запущенной, и по каждому нажатию кнопки в окне программы она делала новый скрин, распознавала и обрабатывала Excel?
    Тогда можно сделать так:
    Весь кусок снятия скриншота и сохранения файла (начиная с screen = ) для удобства обернуть в функцию, например screengrab()
    И затем свой поиск обернуть в бесконечный цикл с запросом ожидания нажатия пробела (ну или другой кнопки по желанию):
    print('Жми пробел для начала обработки')
    while True:
        keyboard.wait('space')
        print('Погнали...')
        # запуск функции скриншота
        screengrab()
        for sheet in allSheetNames:
            print('Текущее имя листа {}'.format(sheet))
            currentSheet = theFile[sheet]
            CellLetter = (find_cell())


    Если от всего этого требовалось только распознавание сграбленного скриншота, то можно было бы опустить сохранение в файл и последующее чтение, а просто в этой функции screengrab сразу возвращать результат (картинку), и передавать его в функцию поиска напрямую.
    Написано
  • Как удалить ссылку из txt после использования?

    @o5a
    altinov01, а для чего вообще все это нужно? Судя по методу похоже, что планируется просто выдавать при каждом вызове случайную неповторяющуюся ссылку из файла? Ради этого все затеивалось?
    Тогда можно сделать по-другому: один раз прочитать ссылки из файла, перемешать их случайным образом и затем по одной выдавать. Получится то же самое только без необходимости каждый раз открывать и менять файл.
    Можно например так сделать
    # класс для открытия файла и создания итератора, из которого затем будем по одной брать случайные ссылки
    class RandomLink():
        def __init__(self, filename):
            with open(filename) as f:
                lines = f.read().splitlines()
                random.shuffle(lines)
                self.gen = iter(lines)
    
        def __call__(self):
            return self.__next__()
    
        def __next__(self):
            # если закончились ссылки в файле, то просто возвращаем None. тут уже смотря что хотели реализовать.
            try:
                return next(self.gen)
            except StopIteration:
                return None
    
    # затем "инициализируем" наш объект, при каждом обращении к которому он будет выдавать новую неповторяющуюся ссылку
    random_link = RandomLink('ls_img.txt')
    
    print(random_link())
    await message.answer_photo(random_link())
    .. и т.п.
    Написано
  • Создал код бота в дискорде с помощью ChatGPT почему бот не хочет отвечать на команду?

    @o5a
    Так теперь нужно просто спросить у ChatGPT, где ошибка в этом коде.
    Написано
  • Почему не работает код?

    @o5a
    chupipapa, потому что отступы важны. Если последняя строчка находится внутри if, то работать и не будет, она должна быть непосредственно внутри цикла for.
    Написано
  • Как сделать проверку на нулевое значение Sqlite3?

    @o5a
    Руслан ., можно, но только если человек знает, что делает. Подобное условие ничего не вернет из запроса, поэтому придется дополнительно проверять на отсутствие строк.
    Написано
  • Как сделать проверку на нулевое значение Sqlite3?

    @o5a
    CODEFER, Лучше делать именно по логике:
    1. опросили текущее состояние (количество оставшихся активаций, как выше указали через 'select activations ...') для данного промокода
    2. если оно больше вычитаемого (как в данном случае > 1), тогда уже делаем update, commit и сообщение об успешном окончании, если нет, то даже не пытаемся update, и сразу ругаемся.

    Если же решите воспользоваться вариантом update ... returning, то учитывайте, что commit нужно делать не сразу после update, а в блоке else, когда промокод успешно активирован, иначе вы так сохраните в базе уход в минус.
    Написано
  • Как сделать так чтобы данные перезаписывались, а не добавлялись новые?

    @o5a
    Goobee, Только стоит учитывать, что параметр if_exists = 'replace' не заменяет совпадающие данные в таблице, а полностью ее пересоздает и записывает с нуля. Важно помнить, если планируется догружать данные из новых источников.
    Написано
  • Как передать значенние через переменные?

    @o5a
    Похоже что-то не то сделали. Установленные параметры должны были действовать на протяжении всего сеанса. Когда вы их разделяли, это все делалось в пределах одного соединения или же разных?
    Лучше приведите код, как вы это делали.
    Написано
  • Как превратить str в словарь (2 часть)?

    @o5a
    Скорее всего автору подобные значения (значения-объекты) и не нужны. Можно еще по-простому их просто "сбросить" до строк, передав значение в параметр default, например так:
    import json
    
    a = {'content_type': 'text', 'id': 6450, 'message_id': 6450, 'user': int}
    s = json.dumps(a, default=lambda x:'empty')
    print(s)

    Но по-хорошему действительно лучше сначала из словаря данных удалить весь ненужный мусор.
    Написано
  • Как превратить str(словарь) обратно в словарь?

    @o5a
    Андрей Нифнафов, телеграм не "создает одинарные кавычки", это уже вы их получаете, потому что на каком-то этапе данные в виде словаря преобразовываете в строку.

    Покажите свой код, откуда вы берете вот это своё
    {'id': '4315398315674119871', 'from_user': {'id': 1004756967, 'is_bot': False ...
    в виде строки и тут подскажут, как нужно было правильнее его использовать.

    Если используете API телеграм, то и данные получаете в виде полноценных словарей (или json, что по сути преобразовывается в словарь).

    Предположу, что вы полученный объект (message) сами или выводите через print() или где-то преобразовываете str() поэтому и получается расхождение формата. А нужно напрямую обращаться к полям этого объекта, т.е. message.id
    Написано
  • Почему DB browser for sqlite и питон выдают разные результаты запроса?

    @o5a
    Phys_Math_Man, При запросе SELECT база итак показывает "последнее сохраненное" состояние. Как только какое-то подключение сделало изменения и их сохранило (commit), состояние базы меняется и будет видно для другого подключения уже измененное.
    Написано
  • Почему DB browser for sqlite и питон выдают разные результаты запроса?

    @o5a
    Phys_Math_Man,
    ну а можно как-то посмотреть именно текущее состояние базы данных в программе python?

    В базе итак оно "текущее", когда смотришь. Просто для каждого соединения изменения данных действуют только в пределах этого соединения (запущенной программы) до тех пор, пока не сделан commit.
    Чтобы было понятнее, это можно сравнить с тем, что когда запускаете программу на python и делаете какие-то изменения переменных, они у вас содержат актуальные результаты только пока программа запущена. Если ее закрыть/запустить заново, то значения снова сбросятся ведь.
    Так и тут, пока активно соединение из конкретно запущенной программы, вы эти изменения видите, но в базу они еще не сохранены. Для этого как раз и есть commit.
    Написано
  • Как исправить код? Что я делаю не так?

    @o5a
    qot, а в чем выражается "не работает". Запускаете, а программа через некоторое время завершается без ошибок, не выводя распознанный текст? В таком случае возможно у вас в системе есть еще какой-то микрофон и пытается считать звук с него. У speech_recognition.Microphone можно принудительно указать другое устройство, параметром device_index.
    Возможно стоит попробовать постоянную прослушку микрофона с распознаванием:
    https://github.com/Uberi/speech_recognition/blob/m...
    Написано