Задать вопрос
  • Как сделать вывод имени с SQL | Aiogram?

    AlexNest
    @AlexNest Куратор тега Python
    Alexndrev,
    В таком случае - это комплексная проблема, требующая, по-факту реализации схемы снуля.
    Прежде всего, нужно идентифицировать пользователя исключительно по неизменяемым данным, т.е. по его telegram-id (либо его id внутри группы, как в дискорде. Честно говоря, с ТГ я почти не работал, поэтому не могу сказать, как здесь это реализовано). В целом, вы делали шаги в эту сторону, однако есть несколько "но":
    • Поле id должно быть уникальным. В доках sqlite есть пример как сделать поле таковым. Добавить одного и того-же пользователя два раза уже не получится.
    • Создавать запись о юзере при его первом добавлении в группу. Тут два варианта - предварительно проверять, есть ли соответсвующие данние и если да, то ничего не делать. Альтернативным вариантом будет обработка исключений (напомню, id - уникален и при попытке повторно добавить идентичное значение, драйвер sqlite выдаст ошибку).
    • То, как вы обновляете - неверно и крайне затратно по ресурсам. Обновлять значения можно одним запросом:
    UPDATE users SET rep = rep * 2 WHERE id = 4 -- rep = rep * 2 здесь можно производить любые базовые мат.действия (сложение, вычитание, умножение и деление).

    Ники можно хранить как в базе, так и получать из ТГ на основе id

    Ну и как дополнение - нормализация баз данных. К сабжу отношения не имеет, но в целом полезная вещь.
  • Как сделать вывод имени с SQL | Aiogram?

    AlexNest
    @AlexNest Куратор тега Python
    Alexndrev, ну и? Скрины это хорошо, но без кода, результатом выполнения которого являются эти скрины и описания того что так/не так, не очень понятно, чего вы ожидаете.
    Тем ни менее:
    На первом скрине видно, что вы пытаетесь вы печатаете cursor.execute() или какой-то другой его метод. В общем случае, когда вы выполняете запрос-выборку, по нему можно итерироваться, как и по итераторам/генераторам, но как и в случае с последними - напрямую получить данные из него нельзя. Нужно вызывать метод .fetchall()/.fetchone() Как в примере.
    По второму скрину - вообще ничего конкретного сказать нельзя. Ну, есть список экспертов, он выводится.
    Возможно, проблема в том, что у всех экспертов одинаковое имя. Тогда проблема в том, какие ограничения установлены на уровне базы для отсеивания дублирующихся имен (скажу сразу - из нет) и в том, каким способом вы проверяете при добавлении/обновлении значений, есть ли уже юзер с таким именем в базе (опять же, в приведенном коде таких проверок нет).
  • Как сделать вывод имени с SQL | Aiogram?

    AlexNest
    @AlexNest Куратор тега Python
    Alexndrev, в таком случае проверьте - насколько правильно вы формируете запрос.
    В примере создал точно-такую-же как у вас таблицу и запрос, но с именем:
    пример
    import sqlite3
    with sqlite3.connect('db.sqlite3') as conn:
    	conn.execute("CREATE TABLE IF NOT EXISTS users(name TEXT, id INT, rep INT)")
    	conn.execute("INSERT INTO users VALUES('username0',1,2323)")
    	conn.execute("INSERT INTO users VALUES('username1',2,324)")
    	conn.execute("INSERT INTO users VALUES('username2',3,23443)")
    	conn.execute("INSERT INTO users VALUES('username3',4,43521)")
    	conn.commit()
    	cur = conn.cursor()
    	result = cur.execute("SELECT id, name, rep FROM users ORDER BY rep DESC LIMIT 10").fetchall()
    	result1 = cur.execute("SELECT * FROM users ORDER BY rep DESC LIMIT 10").fetchall()
    	cur.close()
    	print(result)
    	print(result1)

    Все работает отлично:
    [(4, 'username3', 43521), (3, 'username2', 23443), (1, 'username0', 2323), (2, 'username1', 324)]
    [('username3', 4, 43521), ('username2', 3, 23443), ('username0', 1, 2323), ('username1', 2, 324)]

    И да, как видите можно выбирать все значения с помощью *
  • Как мне это реализовать?

    Как мне это реализовать?

    Открою секрет, но путем разработки алгоритма написания соответствующего кода:
    • Задача преобразуется в набор минимально-возможных и максимально-четких подзадач.
    • На основе подздач из п.1 реализуются алгоритмы.
    • На основе алгоритмов пишется код.
  • Не могу найти драйвера для ноутбука?

    Не могу найти драйвера для ноутбука?

    Да, не можете. Это констатация факта, не вопрос. Обратите внимание на п.3.1 правил и в дальнейшем - задавайте вопросы более корректно.
    По сабжу:
    вариант 1: google -> toshiba satellite l655 1h7 драйвера
    вариант 2: Открываете диспетчер устройств -> смотрите название модулей -> находите в том-же гугле
    Ну и не забывайте, что 7-ка может автоматически ставить большую часть дров (кроме видяхи и специфических устройств).
  • Как получить JSON у отдельного поста?

    alapys,
    Из шаблона сделать запрос с помощью xmlhttprequest или fetch на указанный url после чего как-то обработаь.
    С другой стороны - я не очень понимаю, зачем получать json, если вы уже получили данные из представления.
  • Как получить JSON у отдельного поста?

    alapys,
    я думал, что нужно создать еще одну например отдельную страницу, /api/json-post на которую будет выводится данные о посте в формате json.

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

    alapys,
    одновременно переход на шаблон и запись json

    Запись json куда а главное зачем? Json обычно используют просто как удобный и структурированный способ передачи данных между одним кодом и другим. Например, для "бесконечной" погрузки контента (при пролистывании до определенного блока запускается JS-скрипт, посылающий запрос к серверу и получающий json с данными, который потом преобразуется в html разметку опять же силами js). Поэтому, по крайней мере для клиент-серверной системы вроде сайта понятие "запись json" нужно раскрывать чуть более подробно.
    получать pk и по нему строить json запрос на другой странице(/api/json-post)

    Тут тоже не очень понятно как трактовать:
    1.Нужно открывать новую вкладку/перейти на другую страницу, содержащую json?
    window.open('http://example.com');
    2. Динамически обновлять контент (о чем я уже писал выше и о чем подумал изначально)?
    Используйте js: xmlhttprequest/fetch/ajax.
    3.Выполнять какую-то логику (отправлять запрос к другому серверу/в мессенжер или что-то еще.)
    Тут сложно дать какой-то однозначный ответ - для запросов на python используют, в основном, requests. В остальном - нужно более четко формулировать задачу.
  • Как сделать базу данных?

    AlexNest
    @AlexNest Куратор тега Python
    Ну оно и логично. В приведенном вами коде нет ни запроса, который проверяет на основе данных юзера, есть ли запись в базе, ни запроса, который эти же данные вставляет. Вместо этого - есть какие-то заглушки:
    result = await cur.execute("SELECT * FROM profile WHERE uid")
    await cur.execute('INSERT INTO profile(uid) VALUES (uid)')

    Как правильно вставлять данные смотрите в документации по библиотеке.
    Вот пример для sqlite
  • Как сделать базу данных?

    AlexNest
    @AlexNest Куратор тега Python
    Artem4442, ну да. Здесь то вы юзера не указали:
    async def on_message_new(self, message):<br>
            user = await self.bot.get_user(message.from_id)<br>
            reg = await basa.register.main.register()
  • Как исправить "pymysql.err.ProgrammingError: Cursor closed"?

    AlexNest
    @AlexNest Куратор тега Python
    Artem4442, но это уже отдельный вопрос, касающийся структуры таблицы и запроса. Который, к слову, лучше опубликовать отдельно, приложив структуру базы (желательно в виде sql-кода, с помощью которого вы создавали ее. Если его нет - посмотрите, как вывести ее для вашей субд), пример запроса, который вы пытаетесь выполнить и какую ошибку выдает.
  • Как исправить "pymysql.err.ProgrammingError: Cursor closed"?

    AlexNest
    @AlexNest Куратор тега Python
    Artem4442, в ответе выше уже сказали - второй запрос нужно поместить внутрь блока with
    async with conn.cursor() as cur:
                    result = await cur.execute("SELECT * FROM profile WHERE uid")
                    row = await cur.fetchall()
                    if result == 0:
                        await cur.execute(f'INSERT INTO profile(uid) VALUES(uid)')
                    else:
                        return await row
  • Как получить JSON у отдельного поста?

    alapys, ну да. Передавать точно-также как и в оригинальную функцию.
    Пример:
    # url.py 
    path('<int:pk>/',views.get_json_response)
    
    # views.py
    def get_json_response(request, pk):
        user = UserModel.objects.get(pk=pk)  # UserModel - переопределенная модель Юзера
        if user:
            user_data = {
                'first_name': user.first_name,
                'middle_name': user.middle_name,  # Добавлено отчество
                'last_name': user.last_name,
                'email': user.email,
            }
        else:
            user_data = {'error': 'User not found'}
        return JsonResponse(user_data, json_dumps_params={'ensure_ascii': False})
  • Как сделать динамическое обновление страницы js?

    no I in team, можно и на чистом js

    С другой стороны многое зависит от бекенда. Под Flask, вроде есть только IO-библиотека. Django-channels (у django jinja-подобный шаблонизатор, возможно вы его имеете ввиду) вроде может с обычными ws работать. За другие фреймворки нужно гуглить.
  • Ошибка "SyntaxError: multiple statements found while compiling a single statement", в чем проблема?

    AlexNest
    @AlexNest Куратор тега Python
    И в предпоследней строке ошибка.
    Должно быть:
    if x4> max: max = x4
  • Не работает код при использовании команды, как исправить?

    AlexNest
    @AlexNest Куратор тега Python
    bybacapitan, бросить писать ботов и учить python.
    Серьезно. Если вы не понимаете, что проблема в отсутствующем отступе (о котором, кстати, четко сказано в ошибке), при учете того, что это буквально одна из основ синтаксиса , то писать что-то сложное вам рановато.
  • Не работает код при использовании команды, как исправить?

    AlexNest
    @AlexNest Куратор тега Python
    bybacapitan,
    1.Убрать из init:
    self.connection = self.connection.cursor()
    2.Поместить указанный код в блоки:
    with self.connection: