Задать вопрос
  • В чем принципиальная разница между идентифицирующей и неидентифицирующей связью?

    Vindicar
    @Vindicar
    RTFM!
    Ну, положим, они не полностью равносильны.
    В Phone_1 id должен быть уникален для каждой записи. Поэтому если ты захочишь переключить запись в Phone_1 с одного Employee на другого, ты точно всегда сможешь это сделать. Это можно интерпретировать как "записи в Phone_1 существуют сами по себе, несмотря на обязательную связь с Employee".
    В Phone_2 id должен быть уникален среди записей с одинаковым Employee_id. Т.е. уникальной должна быть их комбинация. При попытке переключения записи в Phone_2 с одного Employee на другого Employee есть риск коллизии по id. Это можно интерпретировать как "записи в Phone_1 существуют строго в контексте Employee, и их собственные id имеют смысл только в контексте, заданном Employee_id". Т.е. Employee_id становится своего рода "пространством имён".
    Ответ написан
    2 комментария
  • Как перенести данные из динамических инпутов в базу данных?

    Vindicar
    @Vindicar
    RTFM!
    чтобы django просмотрел всю страницу

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

    Цепочка обычно такая:
    1. Клиент посылает запрос, в том числе при переходе по ссылке
    2. Сервер генерирует страницу (тут работает питон), которая может включать в себя JS код.
    3. Сервер отправляет страницу клиенту. Начиная с этого момента Питон не может ничего сделать.
    4. Клиент разбирает страницу и выполняет JS код.
    5. JS код может выполнить еще один запрос к серверу.

    Так что не "пусть django просмотрит страницу", а "JS код на странице должен сформировать фоновый (AJAX) запрос к отдельному URL, в теле которого передать на сервер содержимое таблицы. Обработчик этого URL на стороне сервера должен принять тело запроса, валидировать полученные данные и поместить их в таблицу".
    Тогда задача разбивается на несколько типовых подзадач:
    1. Отправка AJAX-запроса на JS по нажатию кнопки на странице (гуглится).
    2. Отправка AJAX-запроса с телом (гуглится, смотри документацию по JS).
    3. Приём тела запроса в Django (гуглится, смотри документацию по Django).
    4. Превращение тела запроса в структуру данных, удобную для тебя (должен сделать ты). Можно передавать JSON, его легко формировать через JS и легко читать Питоном. Например, список из объектов, где каждый объект - это одна строка таблицы, а поля объекта - значения колонок.
    5. Перебор элементов в структуре и их валидация. Делаешь ты, так как только ты знаешь, какие данные передаются.
    6. Для валидных данных - добавление в таблицу БД (гуглится, смотри документацию по модулю sqlite3).

    Если возникнут вопросы по конкретной подзадаче, задавай их отдельно.
    Ответ написан
    Комментировать
  • В чем ошибка условия if?

    Vindicar
    @Vindicar
    RTFM!
    Ты не указал тип arg, поэтому discord.py оставляет его строкой. А "1" (строка) не равна 1 (числу).
    У discord.py есть удобная фишка - если указать в обработчике события параметры и подсказку типа для них, библиотека попытается разобрать введенную пользователем строку на эти параметры, и привести их к нужному типу. Так что напиши что-то типа
    async def test(ctx, arg: int):
    Ответ написан
    Комментировать
  • Как сделать последовательную проверку?

    Vindicar
    @Vindicar
    RTFM!
    Не пиши простыню кода, а разбей задачу на составляющие.
    Для начала отрефактори(переделай) свой код в функцию такого вида:
    def is_guid_accepted(guid: str) -> bool:
        #тут код

    Т.е. функция, которая принимает GUID и возвращает либо True (подтверждён), либо False (не подтверждён). При ошибке можешь выбрасывать исключение, или тоже возвращать False.

    После этого задача упростится.
    1. Прочитать содержимое .xlsx файла, если так уж хочется эксель (а может, всё же csv? будет проще), вытащить из него список GUID'ов и task_id. Гуглится.
    2. Для каждого GUID в списке вызвать функцию выше.
    3. Если функция вернула True, то добавить task_id в список успешных.
    4. Для каждого task_id в списке успешных отправить оповещение. Тебе виднее, как.
    Ответ написан
    1 комментарий
  • Почему телеграм бот долго реагирует на команды?

    Vindicar
    @Vindicar
    RTFM!
    async with pool.acquire() as conn:
    async with conn.cursor() as cursor:

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

    Vindicar
    @Vindicar
    RTFM!
    Ну так и примени. Вставь определение вопроса внутрь t() и замени отправляемый текст на содержимое question.
    Ответ написан
    Комментировать
  • Как создать баркод?

    Vindicar
    @Vindicar
    RTFM!
    Вряд ли какая-то библиотека для создания штрихкодов это позволяет.
    Так что генерируй штрихкод как умеешь, а потом вставь его в большее изображение с помощью Pillow.
    Ответ написан
    Комментировать
  • Как восстановить подключение к сокету python?

    Vindicar
    @Vindicar
    RTFM!
    Пересоздай сокет client?
    Ответ написан
    Комментировать
  • Как сделать так что бы Socket не стопорил цикл?

    Vindicar
    @Vindicar
    RTFM!
    Есть разные способы. Можно получать данные в отдельном потоке, но это несёт свои проблемы, и довольно много.

    Я бы посоветовал освоить использование select() - эта функция позволяет узнать, есть ли в сокете непринятые данные, прежде чем пытаться их принять.

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

    Vindicar
    @Vindicar
    RTFM!
    Перефразирую - нужно удалить из списка все элементы, для которых существует хотя бы один другой элемент с совпадающими N последними символами. Так?
    Используй collections.Counter.
    l1 = ['Ивановы', 'Петровы', 'Сидоровы', 'Груши', 'Яблоки', 'Стол', 'Машина', 'Лампа', '940345']
    N = 2
    suffixes = collections.Counter( item[-N:] for item in l1 )
    l2 = list( filter( lambda item: suffixes[item[-N:]] <= 1, l1 ) )
    Ответ написан
    6 комментариев
  • Некорректно передаться данные с сервера на клиент, в чём причина?

    Vindicar
    @Vindicar
    RTFM!
    ну для начала стоит закрыть файл... лучше всего - через оператор with.
    def install():
        with open("starting.exe", "wb") as file:
            data = client.recv(1024)
            while data:
                file.write(data)
                data = client.recv(1024)

    Далее, как клиент поймёт что всё было передано? По закрытию соединения?
    Так тогда сервер должен корректно закрыть это соединение и дать клиенту понять, что больше данных не будет!
    user.shutdown(socket.SHUT_RDWR)
    user.close()
    Ответ написан
  • TypeError: 'TextChannel' object is not iterable?

    Vindicar
    @Vindicar
    RTFM!
    for message in channel:

    Внезапно, так делать нельзя. Кури метод history().
    Ответ написан
  • Поможете создать текстовый квест на python?

    Vindicar
    @Vindicar
    RTFM!
    Так.
    Но когда дело дошло до переделывания структуры программы - > начались проблемы с не знанием символов, операторов, логических уровней python

    Во-первых, нужно освоить азы языка. Порешайте простые упражения, освойте ветвления, циклы, функции, азы классов. Этого хватит.
    текстовый квест

    Во-вторых, стоит освоить идею конечного автомата (state machine). Это реально очень просто.
    Как освоишь, поймешь, что твой квест - это кучка параллельно работающих конечных автоматов. Один описывает локации мира, другие - состояния отдельных квестов (не начат, находится на том или ином этапе, готов к сдаче, сдан, провален).
    Важный вывод: тебе потребуется как-то хранить эти автоматы так, чтобы к любому из них можно было удобно обратиться из любого места!
    В третьих, осваиваешь State Pattern. Он может пригодиться для реализации мира. По сути, у тебя разные локации будут разными состояниями, и каждая из них может быть представлена как отдельный объект, реагирующий на действия пользователя. Реакция заключается в дергании других автоматов (например, не пускать, пока не пройден квест, или инициировать квест по входу в локацию) и в выводе текста.
    Ты можешь описывать разные локации как разные классы или как разные объекты одного класса.
    Первый подход проще с точки зрения кода, но гораздо более громоздкий, так как на каждую локацию придётся отдельный класс.
    Второй подход сложнее с точки зрения кода, но классов будет меньше, а локации будут представлены данными.
    Я бы начал с первого подхода, чтобы освоиться.
    В-четвёртых, тебе потребуется хранить состояние игрока (и возможно других мобов). Это простые классы, или даже просто словари (dict). Я бы всё же сделал классы.

    Тогда у тебя в программе будет три основных блока.
    1. Интерфейс - кусок кода, который показывает пользователю текующее состояние игры и принимает его ввод, а потом отдаёт этот ввод текущему состоянию игры.
    2. Хранилище автоматов. В первую очередь это автомат навигации по миру, но также и автоматы квестов. Можешь сделать его просто словарём с ключами-строками - так бдует проще.
    3. Данные игрока. Лучше хранить в отдельном классе, но автоматы должны иметь к нему доступ, так или иначе.
    Ответ написан
    2 комментария
  • Как исправить ошибку при создании файла?

    Vindicar
    @Vindicar
    RTFM!
    Если в тексте может быть юникод, то нужно задать кодировку при открытии файла, например, encoding='utf-8'. См. open().
    Ответ написан
    Комментировать
  • Не работает очередь вопроизведения музыки у дискорд бота, что делать?

    Vindicar
    @Vindicar
    RTFM!
    vc.play(source, after = toggle_next)
    await songs.put(vc.play)

    Ты запускаешь воспроизведение вызовом метода vc.play(), а потом помещаешь в очередь ссылку на этот метод.
    Что, по-твоему, сиё должно делать? Потому что оно явно этого не делает, и делать не будет.
    Ответ написан
  • Почему бот discord видит только себя?

    Vindicar
    @Vindicar
    RTFM!
    if collection.find({"_id": member.id}) == None:

    Вот это подозрительно, потому что доки говорят, что find() возвращает курсор. Про None там ни слова.
    Так что вполне может быть, что тебе возвращается пустой курсор - т.е. не None.
    Может, ты имел ввиду find_one()?
    Ответ написан
  • TypeError: TeleBot.send_document() takes 1 positional argument but 3 were given?

    Vindicar
    @Vindicar
    RTFM!
    Проверка на вменяемость: какой пакет стоял на ПК - telebot или pyTelegramBotAPI? Они оба импортируются как telebot, но второй куда популярнее.
    Ответ написан
    6 комментариев
  • Как преобразовать строку в словарь?

    Vindicar
    @Vindicar
    RTFM!
    В питоне есть встроенный модуль json. Первая ссылка в гугле по "python json".
    Ответ написан
    3 комментария
  • Как сохранять файлы в aiogram Python?

    Vindicar
    @Vindicar
    RTFM!
    > хотел бы узнать как
    Читай доки на aiogram. Для начала Quick Start. Потом осознаёшь, как использовать фильтры для обработки разных входящих сообщений. Когда осознаешь - смотришь в сторону ContentTypeFilter и ищешь примеры его использования.
    Ответ написан