Задать вопрос
  • Как хранить большие объёмы текста?

    @o5a
    Tiubert, для текстового поля можно просто писать тип text, т.к. по сути в sqlite всё к нему сводится.

    Для работы с БД лучше сразу научитесь использовать параметризованные запросы с подстановкой данных средствами самой системы (через использование "?") вместо ручного форматирования:
    https://docs.python.org/3/library/sqlite3.html#sql...

    Т.е. вместо
    cursor.execute(f"INSERT INTO table1 VALUES (1, '{supertext}')")

    Использовать
    cursor.execute("INSERT INTO table1 VALUES (?, ?)", (1, supertext))


    Поле для первичного ключа (id) можно не задавать самому, а генерировать автоматически, если задать его как
    int primary key
    https://www.sqlite.org/lang_createtable.html#rowid
    Написано
  • Что будет с моим кодом если я удалю, и скачаю заново питон 3.9.5?

    @o5a
    Александр Македонский, сам питон на windows ставится по умолчанию просто в папку c:/python39 (в случае с вашей версией), и при удалении соответственно удаляются файлы только внутри этой папки.
    Если вы свои скрипты не держите внутри этой папки (или какую другую вы выбирали для установки), а в какой-то другой, то при переустановке с ними ничего не будет.
    Есть еще момент, что если не пользуетесь виртуальным окружением (venv и т.п.), а модули ставите просто для всех, то перед удалением предыдущей версии питона стоит сохранить список всех установленных модулей с их версиями, чтобы потом заново их накатить

    pip freeze > reqs.txt
    создаст список всех установленных модулей с их версиями в этом файле reqs.txt
    и затем после установки новой версии можно просто установить все то, что и было до этого
    pip install -r reqs.txt

    Но это нужно только если не пользуетесь виртуальным окружением для своих проектов.
    Написано
  • Как создать правильно API запрос на Python?

    @o5a
    Анастасия, это обычная работа с вложенными данными. В данном случае у вас список, внутри которого словарь. Т.е. сначала достаете первый (нулевой) элемент списка, затем уже в нем достаете значение по ключу "event".
    Написано
  • Как оптимизировать запрос через Sqlalchemy?

    @o5a
    WishesFire, откуда вообще берется filter_body? Сколько записей в filter_body.prj_ids когда тот запрос начинает так сильно тормозить, и сколько записей всего в основной таблице?
    Написано
  • Какова верная реализация множественного выбора в SQLite через LIKE и REGEXP (Python)?

    @o5a
    Vindicar, обычно средствами SQL так и проверяется. Но при желании можно и через regexp
    WHERE word REGEXP '^А-ЯЁA-Z'
    'Ё' нужно отдельно указывать, т.к. в диапазон А-Я не входит.
    Но при наличии upper как-то мало смысла в этом.
    Да и базово sqlite вроде regexp не поддерживает, его нужно отдельно ставить, или самому функцию создавать через re.
    Написано
  • Как использовать команду через @?

    @o5a
    kreyzi, Да, что-то этим упоминанием больше запутали. Т.е. помимо обычных команд просто хотите чтобы срабатывало и от формата с упоминанием. Само упоминание насколько я понимаю в данном случае не важно для обработки, все равно важен только id. В таком случае насколько я понимаю, можно без regexp обойтись, просто методами самого vkbottle.
    Вместо всего этого
    @bot.on.message(text=["Призми погладить", "Рп погладить", "[id{user_id}|Фурина]"])
    async def pat_user(message: Message):
        # Проверяем, было ли упоминание пользователя через @
        mentioned_user_id = None
        mentioned_users = re.findall(r'\[id(\d+)\|.*?\]', message.text)
        if mentioned_users:
            mentioned_user_id = mentioned_users[0]

    Просто напрямую прописать этот формат в хэндлере, и затем использовать найденные им значения в функции
    @bot.on.message(text=["Рп погладить [id<mentioned_user_id>|<mentioned_user_name>]", "Призми погладить", "Рп погладить"])
    async def pat_user(message: Message, mentioned_user_id=None, mentioned_user_name=None):
        mentioned_user_id ... # уже можно использовать напрямую
        # можно и само имя использовать, если вдруг пригодится mentioned_user_name

    Так должно работать для "Рп погладить [idxxx|кто-тотам]", для второго аналогично сделать.
  • Как использовать команду через @?

    @o5a
    kreyzi, проверку наличия найденного значения пропускать тоже не надо, которую до этого делали. Без нее конечно будет в ошибку уходить, если присылать сообщение, в котором вообще нет такого кода
    mentioned_users = re.findall(r'\|@(.+?)\b', message.text)
    if mentioned_users:
        mentioned_user_id = mentioned_users[0]

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

    @o5a
    Потому что
    s = pop.x = x + 1
    означает
    s = x + 1
    pop.x = x + 1
    Т.е. это не то же самое, что
    s = pop.x + 1

    Когда первый раз запускается gls() и доходит до import pop, она импортирует саму себя и снова запускает gls(). Внутри нее pop.x это и есть x, поэтому после того, как первый раз печатает x, она печатает x в области видимости импортированного pop, поэтому он увеличен на 1. Когда же заканчивает обработку импортированного и второй раз печатает x, то это уже локальный x, который не увеличивался.

    А вообще импорт самого себя лучше не делать в реальном коде, разве что делаете это для изучения особенностей языка. Иначе лишние проблемы себе создадите.
  • Как использовать команду через @?

    @o5a
    kreyzi, я думал, поймете сами, что там не просто text, а message.text, я же просто показывал шаблон
    mentioned_users = re.findall(r'\|@(.+?)\b', message.text)
  • Как использовать команду через @?

    @o5a
    kreyzi, если все-таки хотите из текста 'Рп погладить [id559313892|@valia_frosya]' доставать именно 'valia_frosya', то так:
    mentioned_users = re.findall(r'\|@(.+?)\b', text)
  • Как использовать команду через @?

    @o5a
    kreyzi, т.е. получается, что в тексте с упоминанием всегда будет использован idxxx ? Тогда достаточно только его и искать, вообще не важно, кто там в подмене:
    mentioned_users = re.findall(r'\[id(\d+)', text)
  • Как использовать команду через @?

    @o5a
    kreyzi, Т.е. все-таки в самом тексте квадратных скобок нет. Я не особо в курсе, как в vk отображается "перекрытие именем", если там как раз и идет id12345, то можно так:
    mentioned_users = re.findall(r'(?:id|@)(.+?)\b', message.text)
    mentioned_users[0]
  • Как использовать команду через @?

    @o5a
    kreyzi, как именно это в тексте будет выглядеть? Так в скобках и будут писать что ли? Или все-таки текст будет в таком виде: "Погладить id1235", "Погладить @vredinka_panda"?
  • Как использовать команду через @?

    @o5a
    kreyzi, зачем вы строку поиска regexp (шаблон) в квадратные скобки заключаете? У них другое назначение. Указанное у вас '\[id(\d+)]' будет искать строку вида ".... [id12345]"
    В тексте вопросе же вроде речь шла про "... @id12345". Какого вида текст тогда все-таки использовать планируется?
  • Как использовать команду через @?

    @o5a
    kreyzi, не совсем понятно, в чем именно вопрос? Помочь правильно написать regexp, который бы из текста вида "что-то там @id12345 и так далее" вытащил "12345", я так понимаю это пытались сделать? Если так, то достаточно "@id(\d+)"
  • Почему через psycopg2 не могу получить список таблиц в postgres?

    @o5a
    lisi4ka, А до изменения получается порт пустой был? 5432 итак является портом по умолчанию, так что если не указывать, а потом указать 5432 это будет одно и то же соединение, один сервер. Возможно что-то еще параллельно изменили.
  • Почему через psycopg2 не могу получить список таблиц в postgres?

    @o5a
    lisi4ka,
    Я под тем же пользаком сижу в dbeaver и он там может CRUD. Но не может создать запись в таблице т.к. не может её найти.

    Под "может CRUD" подразумеваете, что может менять записи в таблицах, но не тех, что нужны, т.е. из схемы public?
    Что будет, если в DBeaver (и потом скрипте) от этого пользователя просто делаете запрос

    select* from public.название_той_таблицы

    Если пользователь не видит нужных таблиц в information_schema, значит у него как раз нет на них прав. Также и прямой select из этой таблицы сразу покажет. что нет прав.

    По вашему описанию также похоже, что в DBeaver и скрипте соединяетесь или под разным пользователем, или все-таки к разным базам.
  • Почему через 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)