Задать вопрос
  • Почему не могу получить второй график?

    @o5a
    А чего вы ожидаете, вы используете явно линейную формулу для этого давления, вам линию и рисует. На приведенном скрине явно какая-то другая формула. Будете использовать полную формулу, получите нужный график.
    Написано
  • Почему возникает ошибка AttributeError: 'Database' object has no attribute 'cursor'?

    @o5a
    Vindicar, действительно мистика.

    danya2854, а что выводит, если прямо перед той строкой
    print('__init__:', self.cursor)
    добавить
    print(dir(self))
    Написано
  • Как исправить TypeError: string indices must be integers, not 'str'?

    @o5a
    Сделайте вывод через print() того, что у вас находится в accounts, account и сразу поймете причину ошибки.
    Еще подсказка:
    for user in {"name": "mike"}:
        print(user)
    Написано
  • Как распарить массив на Питоне в Logs API Яндекс Метрики?

    @o5a
    Степан, А как это выглядит в самом CSV, покажите кусок чисто данных из CSV, а не скриншот.
    Написано
  • Как распарить массив на Питоне в Logs API Яндекс Метрики?

    @o5a
    Степан, у вас в поле csv и хранится прямо текстом это "[267....,2825,....]" ? Это вы сами в таком виде CSV сохранили или прямо CSV такой скачали? Может лучше тогда разобраться, почему в CSV в таком виде сохраняется? Тут скорее напрашивается, что изначальные данные в json должны быть.

    Распарсить то эту строку в виде списка можно, но лучше бы изначально данные не коверкать, чтобы не приходилось потом парсить?
    Написано
  • Как корректней распарсить список из списков для MongoDB?

    @o5a
    O_oo, Так когда подтягиваете из виджета, сразу и форматируйте как нужно.
    "Coords": [{"x":x, "y":y} for x,y in self.verticalLayout_10.itemAt(index).widget().coordinates]

    Вместо
    "Coords":self.verticalLayout_10.itemAt(index).widget().coordinates
    Написано
  • Не настраиваются разные уровни логирования в python logging?

    @o5a
    Не знаю особенностей этого tg_logger, но попробовать сделать его именно явным хендлером, чтобы именно ему назначить уровень
    вместо установки общего уровня:
    tg_logger.setup(logger, token=token, users=users, tg_format="<b><u>%(name)s</u> : %(levelname)s</b>\n\n<code>%(message)s</code>")
    file_handler = RotatingFileHandler(log_file, maxBytes=1024*1024, backupCount=10)
    file_handler.setLevel(logging.INFO)
    file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
    logger.addHandler(file_handler)
    logger.setLevel(logging.WARNING)

    сделать:
    tg_handler = tg_logger.setup(logger, token=token, users=users, tg_format="<b><u>%(name)s</u> : %(levelname)s</b>\n\n<code>%(message)s</code>")
    tg_handler.setLevel(logging.WARNING)
    file_handler = RotatingFileHandler(log_file, maxBytes=1024*1024, backupCount=10)
    file_handler.setLevel(logging.INFO)
    file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
    logger.addHandler(file_handler)
    Написано
  • Как правильно указать числовые данные SQL для координат?

    @o5a
    Указывал DECIMAL(3, 20)[], выдавало ошибку "неверный синтаксис для типа numeric".

    Потому что в разрядности первым указывается общее кол-во знаков, затем кол-во десятичных, т.е. в данном случае должно было быть
    DECIMAL(23, 20)[]

    и вместо decimal(23,20) можно использовать и numeric(23,20), по сути идентично
    Написано
  • Как правильно создать товар через Ozon Seller API?

    @o5a
    m170rd, Если посмотреть по той же документации, то видны расхождения
    1. В документации "attributes": "id"
    у вас "attributes": "attribute_id"
    2. У них в примере я так понимаю категория имеет id 5076, у вас 8229. У них 8229 я так понимаю это как раз описание самого товара (сужу чисто по их примеру, с ozon API не работал).

    Как минимум 1-й пункт не правильно у вас.
    Написано
  • Как декодировать XmlLayer из пакета с помощью Python, конвертируя в JSON?

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

    @o5a
    cvzxxd, эту стороннюю программу тоже вы пишете? Или хотите передавать данные в какую-то чужую программу? Если свою, то можно на сервере реализовать API, как предложено выше, а свою программу написать так, чтобы она сама периодически обращалась к серверу через API, получала эти данные и показывала у себя.
    Написано
  • Как установить имя таблицы в виде даты sqlite3 Python?

    @o5a
    ganstar565, решение себе Вы нашли, но если вам подобное понадобилось, значит скорее всего таблицы вы придумали неправильно. В названии таблиц не должно требоваться использовать какие-то даты. Если хотите делить данные по датам, это делается на уровне поля, а уж никак не названия самой таблицы.
    Написано
  • Openpyxl. Как кортеж записать в диапазон ячеек?

    @o5a
    Можно еще обращаться так:
    ws.cell(row=..., column=...).value = ...
    Т.е. тоже перебор по индексам heading и затем в row=1 менять только column на соответствующее значение и записывать value.

    for sheet in wb.sheetnames:
        ws = wb[sheet]
        for i, value in enumerate(heading):
            ws.cell(row=1, column=i+1).value = value
    wb.save('Сборочный.xlsx')
    Написано
  • Как увеличить паузу между отправкой запроса и получением результата?

    @o5a
    Rozalot, очень похоже, что вы просто неправильный метод API используете, и вам нужен другой, они же там разные есть.
    Судя по https://api.travelpayouts.com/aviasales/v3/prices_... вы используете этот:
    https://support.travelpayouts.com/hc/ru/articles/2...
    По описанию - это "Запрос возвращает самые дешевые авиабилеты за определённые даты, найденные пользователями Авиасейлс за последние 48 часов."
    Т.е. конкретно этот метод возвращает не просто билеты по направлению, а именно те, что пользователи искали на сайте за последние 48 часов. Но при этом в примере указываете дату 2024-07-01, т.е. спрашиваете сайт "покажите мне самые дешевые билеты, которые за последние 2 суток пользователи искали по такому-то направлению с датой отправления 2024-07-01". Возможно просто никто и не искал такие билеты за последние 2 суток, вот вам ничего и не возвращает. Хотя я не знаю логики работы этого сайта, может я не так понимаю их формулировку.

    Возможно вам для поиска нужен вообще другой метод, такой например:
    https://support.travelpayouts.com/hc/ru/articles/2...
    Тут уже больше похоже на систему с задержкой, т.к. сначала вы отсылаете запрос поиска, а потом по этому поисковому id постепенно получаете результаты.
    Написано
  • Как увеличить паузу между отправкой запроса и получением результата?

    @o5a
    Rozalot, это что-то непонятное они пишут. Как уже другие вам тут написали, сам запрос API не управляет временем ответа. Вы буквально говорите серверу: как будешь готов, ответь на мой вопрос. И сервер сам решает, когда вернуть данные (или вообще не вернуть). Какая-то там внутренняя задержка сервера могла бы регулироваться параметрами самого запроса API (если они это продумали), но сам по себе запрос get/post подобных параметров задержки не имеет, это всё на стороне самого сервера.
    Написано
  • Как увеличить паузу между отправкой запроса и получением результата?

    @o5a
    Rozalot, с чего вы взяли, что
    причина - недостаточная пауза между отправкой запроса и получением результата. Для получения полноценного ответа требуется порядка 30 секунд ожидания.
    ?

    Когда посылаете серверу запрос, он его формирует и когда готов, возвращает его вам. Он сам этим управляет.
    Написано
  • Как оптимизировать запрос?

    @o5a
    lil_koi, по поводу долгого исполнения создания индекса, может быть еще какая-то особенность DataGrip. Попробуйте DBeaver (есть бесплатная Community Edition), хорошо с Postgres работает, подобных проблем не замечалось.

    По поводу изначального кода еще:
    1) не надо делать commit после каждой команды, сделайте в конце, после массовых изменений.
    Точнее, некую середину выбрать, как предложили уже, хотя бы не чаще каждых 100 команд.
    2) если есть возможность, лучше минимизировать количество таких вызовов update через код python именно, т.е. предварительно сгруппировать данные так, чтобы по каждому диапазону дат получался только один вызов update.
    3) можно свою таблицу данных погоды по дням сначала загрузить в отдельную таблицу в базе, а потом уже средствами SQL сделать update одной командой, напрямую выбирая данные из самой базы. Такое как правило обрабатывается гораздо быстрее, чем повторный вызов update через курсор питона.
    Написано
  • Как выводить цифры числа слева направо?

    @o5a
    Вам ведь в прошлом вопросе уже привели варианты решения этой задачи.

    А в текущем коде вы как будто написали, не представляя, что делаете.
    for i in range(10):
    ....
            if n1 % 10 == i:

    Просто последовательно перебираете числа в надежде, что в таком порядке они совпадут с остатком от деления. Тут в целом метод решения неправильный.
    Написано
  • Как хранить большие объёмы текста?

    @o5a
    Tiubert,
    (насчет подстановки данных с помощью "?") я не заметил в моём случае разницы между подстановкой данных и более мне привычными f-строками.

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

    Насчет primary key я почитал в документации, я понял его "задачу" - каждая строка имеет свой уникальный идентификатор, но не до конца понял "а почему я так не могу?". После добавления primary key в таблицу добавляется просто еще одно правило которое (возможно) никак не сказывается на, например, поиске строки с указанным id: как было WHERE id = 1 так и осталось.

    primary key (PK) нужен как раз для того, чтобы не задавать эти идентификаторы вручную.
    Т.е. вместо того, чтобы самому следить за уникальностью id при вставках вида
    cursor.execute("INSERT INTO table1(id, embed) VALUES (?, ?)", (1, supertext))

    Поле id заводится как primary key и вставка делается без явного задания этого поля, оно автоматически будет инкрементироваться
    cursor.execute("INSERT INTO table1(embed) VALUES (?)", (supertext, ))


    Но нужно понимать, для чего у вас это поле id. Если это просто уникальная позиция записи в таблице, то лучше и использовать автоматическую генерацию PK. Если же вы хотите его вести как некий однозначный код, когда знаете, что под кодом 1 у вас всегда "О великий текст, ....", под кодом 2 другой определенный текст и т.д., то автоинкремент для данного поля уже не нужен. Но даже в этом случае лучше развязать между собой сущности: PK автоматический инкремент отдельно (то поле id), код отдельно (назначаемый явно вручную). Это будет лучше, если потом захотите связывать эту таблицу с другими по ключам. Но если планируется все проще, скажем это будет просто одна таблица без лишних связей, то можно и не усложнять.
    Написано
  • Как хранить большие объёмы текста?

    @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
    Написано