Ответы пользователя по тегу Python
  • Как оптимизировать запрос через Sqlalchemy?

    maccree
    @maccree
    freelance backend developer
    1. Использовать индексы https://docs.sqlalchemy.org/en/21/core/metadata.ht...

    2. Выбор только необходимых столбцов это достигается через `select`
    https://docs.sqlalchemy.org/en/21/orm/query.html#s...

    3. Можно птимизация использования функций:
    Функции, используемые в запросах, могут сделать их медленными. Проверьте, какие функции вы используете и как они влияют на производительность. В SQLAlchemy это функции из модуля `func`.

    https://docs.sqlalchemy.org/en/21/core/sqlelement....



    query = (
        select(
            func.coalesce(A.id, "").label("card_1"),
            func.coalesce(A.serial_number, "").label("card_2"),
            func.coalesce(B.name, "").label("card_3"),
            func.coalesce(C.name, "").label("card_4"),
            func.coalesce(A.user_name, "").label("card_5"),
            func.coalesce(A.user_phone_number, "").label("card_6"),
            func.coalesce(A.balance_current, "").label("card_7"),
            func.coalesce(A.balance_bonus, "").label("card_8"),
            func.coalesce(A.active, "").label("card_9"),
            func.coalesce(D.name, "0").label("card_10"),
            func.coalesce(A.type, "").label("card_11") if filter_body.is_active == 1 else None,
        )
        .filter(A.company_id.in_(filter_body.prj_ids))
        .join(B, A.company_id == B.id)
        .join(C, A.voc_id == C.id)
        .outerjoin(D, A.tariff_plan == D.id)
        .offset(filter_body.offset)
        .limit(filter_body.limit)
    )
    
    async with self._async_session_scope() as s:
        result = await s.execute(query)
    return result.fetchall()
    Ответ написан
    Комментировать
  • Как в строке найти только нужный текст?

    maccree
    @maccree
    freelance backend developer
    используй strip()

    t = "310_089-2"
    
    with open('file.txt', 'r') as file:
        lines = file.readlines()
    
    result = [line.strip() for line in lines if t in line]
    
    print(result)


    тут мы открываем файл file.txt, читает строки из файла, затем используем list comprehension для фильтрации строк, содержащих искомый текст t. Результатом будет список строк, в которых найден искомый текст.
    Ответ написан
    Комментировать
  • Как проверить доступность username в Telegram?

    maccree
    @maccree
    freelance backend developer
    В официальном апи( насколько я знаю ) нет запросов на проверки, но можно выкрутиться так:

    import requests
    
    def check_telegram_username(username: str):
        api_url = "https://api.telegram.org/bot<твой токен бота>/createChat"
        
    
        params = {
            'user_id': 't10000',  # любой user_id (например, 't10000')
            'type': 'private',
            'title': 'test_group',
            'first_name': 'Test',
            'last_name': 'User',
            'username': username
        }
    
        response = requests.post(api_url, json=params)
    
        if response.status_code == 200:
            data = response.json()
            if 'result' in data and 'chat' in data['result']:
                return True 
            else:
                return False  
    
    # пример использования
    username_to_check = 'your_username'
    result = check_telegram_username(username_to_check)
    
    if result is not None:
        if result:
            print(f"Username '{username_to_check}' доступен.")
        else:
            print(f"Username '{username_to_check}' занят.")


    тут мы пытаемся создать аккаунт с нужным username, если мы можешь, то получаем в ответе True, если нет - False
    Ответ написан
  • Есть ли в питоне в стандартной библиотеке под типы целочисленные(знаковый\безнаковый, byte, short)?

    maccree
    @maccree
    freelance backend developer
    в питоне нет типов целых чисел с явно заданным размером, как byte или short, место этого у нас есть обычные целые числа int, которые автоматически масштабируются под нужный размер.

    если НУ ОЧЕНЬ нужны фиксированные размеры, можно использовать библиотеку ctypes
    что-то типо:

    import ctypes
    
    signed_byte = ctypes.c_int8  # знаковый 8битный
    unsigned_byte = ctypes.c_uint8  # беззнаковый 8битный
    
    signed_value = signed_byte(-5)
    unsigned_value = unsigned_byte(255)
    
    print(signed_value.value)   #  -5
    print(unsigned_value.value) # 255
    Ответ написан
    Комментировать
  • Как отправить сообщение на email с помощью python?

    maccree
    @maccree
    freelance backend developer
    # Import smtplib for the actual sending function
    import smtplib
    
    # Import the email modules we'll need
    from email.mime.text import MIMEText
    
    # Open a plain text file for reading.  For this example, assume that
    # the text file contains only ASCII characters.
    with open(textfile, 'rb') as fp:
        # Create a text/plain message
        msg = MIMEText(fp.read())
    
    # me == the sender's email address
    # you == the recipient's email address
    msg['Subject'] = 'The contents of %s' % textfile
    msg['From'] = me
    msg['To'] = you
    
    # Send the message via our own SMTP server, but don't include the
    # envelope header.
    s = smtplib.SMTP('localhost')
    s.sendmail(me, [you], msg.as_string())
    s.quit()


    Вот тут посмотрел
    Ответ написан
    Комментировать
  • В чем причина ошибки в импорте модуля Telegram?

    maccree
    @maccree
    freelance backend developer
    Попробуй через апдейтер
    from telegram.ext import Updater
    
    updater = Updater(token='<YOUR TOKEN HERE>')    
    dispatcher = updater.dispatcher
    
    def startCommand(bot, update):
        bot.send_message(chat_id=update.message.chat_id, text='Hello!')
    
    start_command_handler = CommandHandler('start', startCommand)
    updater.start_polling(clean=True)
    updater.idle()


    Не знаю, поможет или нет, но выкрутился так
    Ответ написан