• Ошибка sqlite3.OperationalError: no such column: cash, как решить?

    @o5a
    Значит в таблице нет такого поля cash.
    По всей видимости таблицу создавали изначально с другим составом полей, и она уже есть в базе (без cash), поэтому CREATE IF NOT EXISTS пропускается.

    Или удалите таблицу из базы, если данные не нужны: "DROP TABLE users"

    Или добавьте поле отдельно: "ALTER TABLE users ADD cash BIGINT".
    Ответ написан
    1 комментарий
  • Как в pandas сделать список на основании данных нескольких столбцов?

    @o5a
    Можно вынести вычисления в функцию и применить apply.
    import pandas as pd
    df = pd.DataFrame({'movie': [9999999,  2,  3, 1, 9999999],
                      'rating': [3,  2,  9999999, 9999999, 3],
                      'name': [1,  2,  4, 5, 10]})
    
    def process(row):
        result = row['movie']
        if row['movie'] == 9999999:
            if row['rating'] == 9999999:
                result = row['name']
            else:
                result = row['rating']
        return result
    
    df['sum'] = df.apply(process, axis=1)
    Ответ написан
    Комментировать
  • Возможно ли получить параметр перед функцией?

    @o5a
    Этот "параметр" и есть то, что передается в функцию.
    lambda user: user

    аналогично функции
    def myfunction(user):
        return user

    Что вообще хотели сделать? Зачем берете lambda?
    Ответ написан
    Комментировать
  • Can only concatenate list (not "str") to list. В чём проблема?

    @o5a
    В том, что нет такой операции
    sum(list1, list2)
    Что сделать то хотели? Если к одному списку добавить данные другого, то
    list1.extend(list2)
    Ответ написан
  • Как записать текст в буфер windows с пробелом перед ним?

    @o5a
    Проблема видимо в остальном коде или способе, которым потом пытаетесь прочитать буфер обмена.
    Просто проверьте
    pyperclip.copy(" тест")
    print(pyperclip.paste())

    и увидите, что пробел в буфер заносится.
    Ответ написан
    Комментировать
  • Как нормально реализовать форму регистрации на Python + Tkinter?

    @o5a
    первое в регистрации при попытке ввести данные получает странную ошибку

    Потому что с именами путаница. Например, в reg используются элементы entryEPASS а на проверку передаются entryPASS.
    авторизации проверка логина проходит успешно, а абсолютно эдентичная проверка пароля ставит систему в тупик

    У вас там проверка вообще странная, ищете логин среди всех, затем пароль среди всех, а если совпадают так уходите в бесконечный цикл.
    И вообще, у Вас логины отвязаны от паролей, совпадение покажет даже для несовпадающих пар логин:пароль, даже если они просто есть в данных. Для нормальной проверки нужно хранить их попарно, например в виде словаря logins = {"логин1": "пароль1", ...}
    Правильнее было бы сделать проверку (используя ваши же переменные name, p) и вышеуказанный словарь
    if logins.get(name) == p:
    сразу проверит, что введенные логин и пароль совпадают.

    И саму проверку пароля лучше не привязывать к элементам интерфейса. Сделать функцию, просто принимающую готовые строки (логин, пароль) и выдающую результат проверки. А в эти функции передавать уже строки из нужных элементов интерфейса: entryPASS.get() и т.п.
    Ответ написан
    Комментировать
  • Создание теста для опроса пользователей?

    @o5a
    В котором из 300 вопросов система будет на выбор выбирать в случайном порядке 40 вопросов

    random.sample()
    question_list = random.sample(questions, 40)
    который в последующем был записан в log файл

    По-простому и записывайте через file.write, как уже заметили, текстом вопрос - ответ.
    Для хранения вопросов в текстовом файле можно структурировать
    Можно структурировать и хранить данные вопросов в виде словаря и хранить его в json файле, читать тоже будет просто: json.load()
    Примерно так:
    questions = {
    1: {"question": "Как называется программное средство, в котором осуществляются операции по таможенное оформлению?",
    "answers": ["АИСТ-М", "ВОРОБЕЙ-У", "ЧАЙКА-П", "СТРАУС-Т"],
    "correct": 0},
    2: {"question": "Имеет ли право пользователь использовать предоставленные ему ресурсы в личных целях?" ,
    "answers": ["Да", "Нет", "Иногда"],
    "correct": 1},
    ...
    }

    В таком виде у нас каждая запись содержит полные данные в виде словаря: сам вопрос, неограниченный список вариантов ответов, индекс правильного ответа. Какого-то дополнительного класса для работы не требуется, по крайней мере не для того, чтобы связывать вопрос-ответ.
    или в базу данных

    Можно. Но лучше изучите основы реляционных БД, чтобы создать правильную структуру. Примерно так будет: таблица вопросов, таблица ответов, таблица логов ответов пользователей (только привязка уже будет по идентификаторам таблиц, а не текстами).
    Ответ написан
    Комментировать
  • Как сделать вывод одной определенной строки из БД?

    @o5a
    При данной постановке оптимально было бы выбрать все значения из базы в список (один раз, без сортировок), а затем перемешать его и при каждом запросе выдавать следующее значение по списку.
    # считать все свои тексты в список
    data = [row[0] for row in cur.execute("SELECT name FROM `test`")]
    random.shuffle(data) # теперь данные в рандомном порядке, можно выбирать последовательно


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

    # считать только уникальные номера этих текстов в список
    numbers = [row[0] for row in cur.execute("SELECT number FROM `test`")]
    random.shuffle(numbers) # теперь данные в рандомном порядке, можно выбирать последовательно
    
    # при запросе пользователя берем следующий номер из нашего рандомного списка
    number = ...
    # и по нему уже достаем сам текст из базы
    text = cur.execute("SELECT name FROM `test` where number = ?", (number, )).fetchone()[0]
    Ответ написан
    Комментировать
  • Как боту вывести топ 5 пользователей из sqlite3?

    @o5a
    cur.execute("SELECT * FROM users ORDER BY money DESC LIMIT 5")
    data = cur.fetchall()
    text = '\n'.join(f'{row[1]}:   {row[5]} - монет' for row in data)
    await message.reply(text)
    Ответ написан
    Комментировать
  • Как достать и отправить все строки в Telegram-боте, включающие в себя одну из переменных в базе данных?

    @o5a
    В result содержится вложенный список со всеми полями данных таблицы. Примерно так:
    [(ряд1значение1, ряд1значение2, ...), (ряд2значение1, ряд2значение2, ...), ...]
    Чтобы использовать join нужно сначала сформировать из всех значений ряда текст, чтобы получилось вида
    [строка_ряда1, строка_ряда2, ... ]
    тогда уже можно будет сделать '\n'.join()

    Если все еще не понятно, вот пример из недавних ответов.
    Ответ написан
    Комментировать
  • Почему ORDER BY DESC в mysql работает не в 100% случаев?

    @o5a
    Лелуш Ламперуш,
    И дальнейших непотребствах с полученными данными

    Так может причинах в этих ваших непотребствах, а не том, что сортировка не работает. Вы производите эти манипуляции с данными, которые сортировку и сбивают? Сама по себе ORDER BY не будет сбоить, по крайней мере в таком виде, как привели в вопросе.

    И есть ли какой-то аналог со стороны python , чтобы сортировку производил он по базе , а не сама база , т.к. как сказано выше , она даёт сбои.

    Есть
    Ответ написан
    1 комментарий
  • Как получить значения после сообщения?

    @o5a
    Все данные в message.text. Разрезайте по split и берите, что нужно
    Соответственно для того случая "отправить евро 500" нужно взять все, кроме первого элемента
    currency, amount = message.text.split()[1:]
    Только стоит добавить проверки (в зависимости от запланированной логики работы) на случай, если параметры не будут указаны.

    Еще в aiogram есть свой метод, message.get_args() возвращающий строку аргументов, но он вернет строку, которую тоже надо будет разрезать split()
    Ответ написан
    Комментировать
  • Почему не работает sql запрос в условиях?

    @o5a
    После изменения данных нужно делать
    connection.commit()
    Ответ написан
    Комментировать
  • Как правильно прочитать файл с сохранением типов данных?

    @o5a
    Если структура всегда примерно такая, то можно через ast
    from ast import literal_eval
    
    s = "0:[2,4,5]"
    data = literal_eval(f"{{{s}}}")
    print(data)
    # {0: [2, 4, 5]}
    Ответ написан
    Комментировать
  • Как добавить несколько словарей в CSV (Python)?

    @o5a
    list1 = ['from=<test@yandex.ru>', 'from=<test2@yandex.ru>', 'tes23@yandex.ru', 'test@yandex.ru', ]
    list2 = ['to=<test@yandex.ru>', 'to=<test2@yandex.ru>', 'to=<tes23@yandex.ru>',  ]
    # сформировать сколько нужно словарей по списку
    counters = [Counter(x) for x in [list1, list2]]
    
    with open('outputTest.csv', 'w') as csvFile:
        writer = csv.writer(csvFile)
        header = ['email_from', 'quantity' 'email_to', 'quantity']
        writer.writerow(header)
        for counter in counters:
            for item, cnt in counter.items():
                writer.writerow((item, cnt))

    Или можно изначально не создавать Counter, а делать уже внутри нижнего цикла.
    Или же можно все списки изначально сложить в один и сделать все через единственный Counter.
    Ответ написан
    Комментировать
  • Ошибка при запросе на добавление строки в mysql?

    @o5a
    Для подстановки в mysql вместо ? используйте %s
    И количество знаков подстановки должно совпадать с количеством самих элементов в data_insert.
    Ответ написан
    Комментировать
  • Как отдельно вывести каждое значение из бд?

    @o5a
    Результат выполнения select в курсоре, как и fetchall() выдает не просто кортеж, а вложенный кортеж, т.е.
    ((ряд1значение1, ряд1значение2, ряд1значение3... ), (ряд2значение1, ряд2значение2, ряд2значение3... ), ...)

    соответственно нужно дополнительно join складывать значения ряда в строку, а затем строки рядов в строку.
    result2 = '\n'.join(' ║ '.join(f'{val}' for val in row) for row in cur.execute(f"SELECT * FROM {arg}"))

    А если нужно, чтобы это было выровнено, то можно сначала считать данные, затем вычислить в каждом столбце самое длинное значение, и затем уже вывести, отформатировав по наибольшему.
    Ответ написан
    1 комментарий
  • Как исправить sqlite3.IntegrityError: NOT NULL constraint failed?

    @o5a
    В таблице поля объявлены обязательными (нельзя вставить NULL), что в целом нормально. Но при этом нельзя заносить данные постепенно, нужно делать INSERT один раз в самом конце, когда все данные от пользователя получили, т.е. в функции patronymic.
    def patronymic(message): #получаем отчества
        ...
        cursor.execute("INSERT INTO Profile (user_id, name, surname, patronymic) VALUES (?, ?, ?, ?)", (user_id, name, surname, patronymic))
    Ответ написан
    5 комментариев
  • Как записать данные в бд?

    @o5a
    Добавить ограничение по уникальности этого поля, затем при добавлении записи можно будет при возникновении конфликта (дублировании записей) автоматически пропустить добавление. Конкретный формат зависит от базы данных. Для sqlite:
    добавить unique(имя поля) в создание таблицы
    create table mytable (id integer primary key,
    user_id integer,
    ....,
    unique(user_id)
    )

    затем при вставке данных
    INSERT INTO mytable (user_id, user_name) VALUES (...) ON CONFLICT(user_id) DO NOTHING


    Можно и более костыльный вариант. Перед вставкой данных делать запрос
    result = cur.execute('select 1 from mytable where user_id = ?), (user_id, )).fetchone()
    if not result:
       # делаем insert
    Ответ написан
    Комментировать