• Как взять данные с двух таблиц?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Условие id=id2=ctx.author.id в зависимости от используемой базы может иметь как непредсказуемый эффект, так и вообще возвращать ошибку, потому что id=id2 возвращает булевое значение (true или false), которое затем сравнивается с ctx.author.id, что явно не планировалось. Вместо этого надо сделать два условия: id=id2 AND id=ctx.author.id. А ещё лучше переместить id=id2 в условие JOIN (таблица1 JOIN таблица2 ON условие)

    Далее, при работе с базой лучше использовать строки с плейсхолдерами, к этому следует приучать себя заранее, чтобы избегать рисков SQL-инъекций:

    cursor.execute("SELECT * FROM cars WHERE user_id=?", (current_user_id,))


    (В зависимости от базы данных плейсхолдер может быть не ?, как в sqlite3, а %s или что-то ещё)

    Далее, следует разумно выбирать имена полей в таблицах, чтобы их назначение было более понятным, а то что это за id и id2? Например:

    users:
    - id: id пользователя
    - name: имя пользователя
    - birth_date: дата рождения

    cars:
    - id: id автомобиля
    - owner_id: id пользователя-владельца (из таблицы users)
    - reg_number: гос. регистрационный номер
    - model: модель автомобиля

    Например, при такой структуре данных можно получить список автомобилей пользователя таким запросом

    cursor.execute("SELECT users.id AS user_id, users.name, cars.id AS car_id, cars.model FROM users JOIN cars ON users.id=cars.owner_id WHERE users.id=?", (ctx.author.id,))


    Запись (ctx.author.id,) с запятой в скобках нужна для того, чтобы вместо одного значения в функцию был передан tuple из одного значения. В python (1,2,3) означет tuple из трёх значений, но с одним значением такой синтаксис не прокатывает, (1) даёт то же, что и просто 1 без скобок, чтобы это обойти, надо поставить запятую (1,)
    Ответ написан
    Комментировать
  • Как запустить несколько ботов на одном vps серевре?

    2ord
    @2ord
    Добавить нужное количество в качестве Linux служб, которые автоматически запускаются при старте ОС.

    https://www.linode.com/docs/guides/start-service-a...
    Ответ написан
    2 комментария
  • Как правильно запустить скрипт на VPS?

    @q2digger
    никого не трогаю, починяю примус
    самый простой способ запустить с помощью nohup (nohup /there/is/path/to/your/script &)
    правильный способ - настроить сервисы для запуска и контроля своих скриптов. https://habr.com/ru/company/southbridge/blog/255845/
    Ответ написан
    1 комментарий
  • Не могу спарсить элементы страницы с непонятными классами почему?

    MinTnt
    @MinTnt
    Вообще, парсинг бывает не всегда так прост как кажется. Сайты часто пытаются различными способами даже минимальными, защищаться от простых парсеров, при этом есть ещё и различные разновидности защит.

    А вообще, если ты хочешь посмотреть что же получаем из пост запрос, просто делай запись в файл, так будет проще понять где ошибка и тд. К примеру
    import requests
    
    getpost = requests.get('https://www.parimatch.ru/')
    with open('log.html', 'w', encoding='utf-8') as f:
    	f.write(getpost.text)

    Далее сможем открыть эту страничку, и посмотреть что нам загрузило.

    В основном как мы видим, есть лишь пустая старничка с заставкой. Значит инфа вся подгружается скриптом.

    Ещё раз повторюсь, что не всё так просто, но за то весело устроено. :D

    Я вот пока посмотрел, матчи сначала подружаются get запросом по адресу https://www.parimatch.ru/api/top-matches в формате:
    spoiler
    "abTestLabel":null,"topEvents":[{"id":"F","eventList":["1|6154167","1|6154172","1|6154171","1|6154169","1|6153670","1|6154164","1|6154166","1|6154165","1|6154170","1|6154168"]},{"id":"CS","eventList":["1|6193860","1|6173617","1|6193859","1|6161642","2|6192368","1|6193855","1|6193858","2|6191488","2|6192369","2|6191486"]},{"id":"H","eventList":["1|6185855","1|6185856","1|6174639","1|6174637","1|6174635","1|6174636","1|6190210","1|6174680","1|6174948","1|6179742"]},{"id":"B","eventList":["1|6173785","1|6173786","1|6173784","1|6173976","1|6174103","1|6173789","1|6173929","1|6166406","1|6166663","2|6188578"]},{"id":"T","eventList":["1|6189125","1|6192182","1|6191996","1|6190277","1|6190232","1|6189853","1|6192338","1|6192328","2|6186610","1|6191995"]},{"id":"TT","eventList":["2|6193585","2|6192227","2|6193586","2|6193234","2|6193462","2|6193912","2|6192904","1|6193575","1|6193624","1|6193623"]},{"id":"VB","eventList":["2|6187527","1|6187528","1|6191657","1|6187530","1|6186281","1|6177549","1|6186390","1|6186283","1|6186388","1|6186284"]}],"source":"TopMatch"}

    С которого по этим данным отправляется запрос в БД на получение данных по адресу
    https://www.parimatch.ru/content/strapi/system/graphql?

    query: "query getData($id: [String]) {events(where: {id: $id}) { slug, id, sportCode, categoryId, tournamentId }}" В котором в параметрах даты передаются ID матчей что получены с первого запроса "variables":{"id":["6173617","6154171","6154169".

    Надеюсь помог. :g
    Ответ написан
    4 комментария
  • Как сделать отправку сообщения бота в один текстовый канал?

    Alexandre888
    @Alexandre888 Куратор тега Боты
    Javascript-разработчик
    Ответ написан
    Комментировать
  • Как настроить SSH-сервер для проброса локального порта наружу через ssh -R?

    @RyoidenshiAokigahara Автор вопроса
    Начинающий
    Решение проблемы нашлось здесь: localhost.run/docs/cli

    В частности следующее уведомление:
    NOTE
    Some operating systems set localhost to the ipv6 address [::1] while some frameworks listen on 127.0.0.1, try 127.0.0.1 instead of localhost if there are connection issues.


    Честно сказать не припомню, чтобы встречал упоминания этого момента. Однако при использовании 127.1 напрямую вместо localhost ssh -R 8000:127.0.0.1:3000 remoteserv проброс наконец-то заработал и запрос извне к ubuntu-серверу дошел таки до локального устройства с веб-сервером. С ответом проблемы тоже не возникло по итогу. Как оказалось, с конфигурацией SSH-сервера все было в порядке.

    Надо будет поискать давно ли десятая винда localhost биндит на ipv6 адрес :/
    Ответ написан
    Комментировать
  • Почему Файла нету?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Python — Почему Файла нету?

    В исключении говорится обратное:
    FileExistsError: [Errno 17] File exists:

    Обратите внимание на режим открытия файла:
    with open('C:/Users/myname/Desktop/aiogram/data.txt', 'x') as pd:

    'x' - открытие на запись, если файла не существует, иначе исключение.
    Ответ написан
    2 комментария
  • Ошибка по рекурсии?

    HemulGM
    @HemulGM Куратор тега Python
    Delphi Developer, сис. админ
    Потому что у тебя в методе progress(a, n): <- два параметра, а ниже ты вызываешь его только с одним.

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

    NeiroNx
    @NeiroNx
    Программист
    У вас батенька дыра в безопасности - что-то перехватывает подключения и меняет сертификат.
    Ответ написан
    1 комментарий
  • Что не так, почему else игнорирует?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Элементарно, Ватсон!
    Ваш код эквивалентен следующему:
    if (jso.get('online') == 'True') or 'true':
        print('Это всегда выполняется')
    else:
        print('Это никогда не выполняется')

    Потому, что 'true' это не пустая строка и она ВСЕГДА истинна.
    Ответ написан
    3 комментария
  • Почему бот не видит никого кроме себя?

    SoreMix
    @SoreMix
    yellow
    Передать нужные Intents при иниализации

    https://discordpy.readthedocs.io/en/latest/intents.html
    Ответ написан
    Комментировать
  • Почему cron убивает процесс автообновления apt?

    @Nikon_NLG
    Посмотрите вывод dmesg, может OOM Killer приходит?
    Ответ написан
    1 комментарий
  • Почему не видит класс?

    @kvkirill
    У вас сначала вызов конструктора, потом объявление класса. Поменять надо местами.
    Ответ написан
    Комментировать