Чтобы избежать ошибки sqlite3.OperationalError: no such column: нужно было просто добавить кавычки f'INSERT INTO users (name, pass) VALUES ("{user_name}", "{password}")'
@@AlexGold пожалуйста! Судя по описанию ошибки, у тебя идёт попытка вставить одно значение в 2 колонки, то есть забыл где-то второе значение указать. Количество значений должно соответствовать количеству столбцов
ошибка на 15:25 была связана с синтаксисом SQL, можно было просто обрамить в двойные кавычки вот так (я так и исправил и сработало, а уже потом увидел ваше решение): cur.execute(f'INSERT INTO users (name, pass) VALUES ("{name}", "{password}")')
Я думаю переменную name лучше делать не глобальной, а передавать из функции user_name в user_pass напрямую. Можно третьим аргументом в метод bot.register_next_step_handler(message, user_pass, name) добавить. Там бесконечное количество переменных можно передавать таким образом.
Это лучший ютубер которого я видел ты очень круто объясняешь темы очень крутой курс смотрю каждое видео и повторяю ща тобой пытаюсь разобраться в каждой строчке очень долго искал такого и не мог найти но ты делаешь невероятное) спасибо большое,удачи в развитии канала
Чтобы не плодить лишний раз глобальные переменные, можно передавать третьим аргументом имя пользователя bot.register_next_step_handler(message, fill_user_pass, name) в этом случае функция fill_user_pass будет принимать не один аргумент - message, а два, например, user_name. def fill_user_pass(message, user_name): Так можно увеличивать их количество от функции к функции, но лучше эти объекты организовывать в список или словарь
Нельзя использовать глобальные переменные в проектах в которых есть несколько пользователей. Потому что если будет параллельно выполняться несколько запросов, нужные данные просто попадут в другой id !
как сделать так, что б в кавычках тоже была подсветка синтаксиса, как на видео? У меня вся строка - 'CREATE TABLE IF...' зеленого цвета, ошибки не подсвечиваются(((
У меня почему то не раскрашивается работа с sqlite3.Как исправить? CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(50), pass varchar(50)) Вот это почему то пишется полностью зеленым а не так как на видео.
Если у вас на моменте 7:42 выдало ошибку: cur.execute(f'CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(50), pass varchar(50)') sqlite3.OperationalError: incomplete input Решение: Надо просто использовать другой способ форматирования строки, например, конкатенацию строк: query = 'CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(50), pass varchar(50))' cur.execute(query) Ответ мне помогла найти GPT, поэтому я сам не до конца догнал почему это так работает, а как Гоша написал не работает... GPT внятно не ответила... ГОША ПОМОГИ ПОЖАЛУЙСТА ПОНЯТЬ почему так?
Тебе нужно просто создать таблицу с атрибутами id, user_name, user_id.... (И какие хочешь данные) и просто делаешь запросы на пример по user_id(т.к он уникален у каждого пользователя телеги) и с него берёшь всё данные которые тебе нужны
ребят мой вам совет. зачастую все ваши проблемы в коде это из-за не внимательности. В 7:30 комманда cur.execute('CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(50), pass varchar(50)') мне выдавало ошибку по типу: sqlite3.OperationalError: и тд так вот. у меня ошибка была в том что я просто забыл закрыть скобки в конце... Для вас задание где я ошибся в коде...
Скорее всего у него пользовательская тема, которая перекрашивает текст в разные цвета даже не смотря на кавычки, если это SQLite3 команда. У меня тоже так, так как я не устанавливал темы
Ребята, подскажите, почему callback_data у меня вообще не работает? всё сделал как в видео, но почему-то вообще не работает(кнопка показывается, но ничего не вызывается)
у меня была такая же проблема, я нашел 2 причины: 1) почему-то вариант написания как у автора у меня не работал видимо я что-то не так делал, пришлось использовать по совету комментаторов : cur.execute(f"INSERT INTO users (name, pass) VALUES ('{name}', '{password}')") 2) я не создавал проект с 0, а использовал файл бота с прошлого урока, причем сильно его сам переработал, дак вот там у меня была другая функция callback, после комментирования которой случилось чудо и все заработало. ЗЫ. я понимаю, что для вас прошел уже почти год, и может вы разобрались почему конфликтуют функции callback, если так, то поясните, гугление особых результатов не дало, а с учетом того, что эти функции у меня носят разные названия я не особо понимаю принцип их вызова, ведь в строке: markup.add(types.InlineKeyboardButton('Список пользователей', callback_data='users')) мы ссылаемся на переменную users и не понятно как интерпретатор понимает к какому callback обращаться. Заранее спасибо!
Сперва начал проходить курс питону у одного блогера, не понравилось перешёл к Гоше и тут всё прекрасно. Начал проходить тут связанный с ботами и понял, что пора искать другой канал. Ощущение, что ты просто постарался сделать максимально ёмко эту работу. Просто напихал всего без особых объяснений. Курс по Питону был прекрасен, а здесь наскоряк что то слепленное. И пожалуйста, если ты пишешь код ,а он не работает - не показывай его. Ты просто издеваешься над нами. Мы переписываем, пытаемся разобраться как работает. Ты запускаешь и....оно просто не работает. Так вырежи это, зачем тратить время и силы Спасибо за курс по питону, но этот курс, я пожалуй, пройду в другом месте
cur.execute('CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(50), pass varchar(50)') sqlite3.OperationalError: incomplete input помогите пожалуйста, что не так?
Вот что мне ответил чат GPT: The code snippet is missing a closing parenthesis ')' for the CREATE TABLE statement. The correct code should be: cur.execute('CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(50), pass varchar(50))') Note the closing parenthesis at the end of the statement. У нас с тобой не хватает еще одной скобки перед закрывающим апострофом '
Я сейчас скажу возможно не самое популярное мнение, но все таки - sqlite3 не сработает по модели mysql, там есть свои моменты, например: id auto_increment p...k, - не будет вводить значения в таблицу, при выборке мы получим значение None, избежать этого можно так - id primary key, name varchar(50), ... либо так - id primary key autoincrement, name varchar(50), ... во втором случае знак "земля" в слове autoincrement не нужен, иначе будет ошибка синтаксиса.
@@evgeniyo2560 4 часа изнасилования мозга и я пришел в комменты поделиться мудростью, чтобы обнаружить, что кто-то уже ответил Знаете, что находит гугл по запросу sqlite primary key Null? Нифига он не находит
Ребята, а подскажите как сделать, чтоб вот эта получившаяся база отправлялась мне в личку, а не отображалась в диалоге пользователя и бота? Можно допустим оставить кнопку скажем (отправить) и при нажатии база уходила бы сообщением на мой акк в телеге. И еще прикольно было бы, чтоб в базу записывалась дата и время. Но это я думаю сам сделаю )))
почему при создании таблицы, в cure.execute весь текст внутри зеленый, int не воспринимает, как исправить, и почему нельзя сразу в видео показать, что нужно доп установить для работы в пайчарм
Почему то не работает. Строка, там где cur.execute('CREATE TABLE IF NOT EXISTS users (id int )'), она не становится желтой и не работает, она просто тупо зеленая
Был интересен вот этот вопрос: coursor.execute("INSERT INTO users (name, pass) VALUES (?, ?)", (name, password)) почему здесь нельзя использовать форматированную строку по типпу f'{name, pass}' Вот что мне подсказали Эту штуку нельзя сделать т.к. пользователь мог бы ввести вот такую команду и дропнусть все базу SQL т.к. была бы воспринята как команда Это называется SQL инъекция вот ее пример: name = "John'; DROP TABLE users; --" sql = f"INSERT INTO users (name, pass) VALUES ('{name}', '{password}')" Да и как заметили вместо симоволов %s оказалось можно использовать ( ?, ?) что чуть чуть удобнее
В теле функции user_name внутри должно быть bot.register_next_step_handler(message, user_pass) У меня сначала было написано bot.register_next_step_handler(message, user_name) и выводило бесконечно "введите пароль", пока не заметил
В 35 линии неправильно написано вообще все, выдает сранную ошибку, вот исправленный вариант cur.execute('INSERT INTO users(name, password) VALUES (?, ?)', (name, password))
Не помогает. Выдало вот что: cur.execute('INSERT INTO users(name, password) VALUES (?,?)', (name, password)) sqlite3.OperationalError: no such table: users
А нельзя было создать подключение к БД в шапке файла перед декораторами самого бота? Тогда в функциях не надо было переписывать кучу одинакового кода. Тогда with conn: cur.execute('SELECT.......') всего надо прописать ну и вернуть cur.execute('SELECT.......') естественно?
Чувак, конструктивчик: 1. Организуй список или словарь. 2. Я понимаю, что питон - язык с динамической типизацией, но очень режут глаза одинарные кавычки. 3. Залог качественного и читабельного кода - это, когда у тебя есть ряд функций и они исполняют по одной индивидуальной задаче. Когда захламляешь код такими функциями а-ля user_pass, в которой ты и пароль принимаешь и записываешь ВСЕ данные в базу, ну такое. Будь это реальный проект можно было бы ой как сильно потеряться в подобных методах.🙃
А вот кстати вопрос. В каждом хэндлере вы заново подключаетесь к бд и дропаете подключение, это по идее сильно влияет на производительность? А если есть желание разделить проект на модули?
Доброго вечера, а можно урок как в телеграм боте отправлять новости. ? К примеру создать простого бота который будет отправлять на Гугл диск для прайсов на товар. А если мы обновили прайсы то мы это как новость написала в боте, и всем кто использует бот в чат пришло уведомления
у многих не поменялся цвет при создании таблицы и у меня в том числе, для тех кто не знает как решить эту проблему, на сколько я понял нужна платная версия пайчарма, у кого другая инфа, буду рад если поделитесь
Здравствуйте, подскажите пожалуйста. Я новичок, хочу написать программу небольшую и у меня возник вопрос. например 1: как тебя зовут? 2: Иван(а) 1: сколько тебе лет? 2; 12 лет(б). 1; Меня зовут (а) и мне (б). как это сделать? в питоне? чтобы быть в последнем сообщении отсылку делать на сообщения. могу код прислать,если надо. подскажите пожалуйста
sqlite3.OperationalError: table users has no column named pass. Я решил эту проблему так : cur.execute(f"INSERT INTO users (name, password) VALUES ('{name}', '{password}')")
@bot.callback_query_handlers(func=lambda call: True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'list' object is not callable КАК ИСПРАВИТЬ ОШИБКУ?
курс отличный но господи это просто ад для ушей слово "некий" в разной форме встречается чаще чем слово "бот" и как же это бесит ибо звучит как будто школьник выучил новое слово и ходит выпендривается
Друг мой,привет.Полезнве знания,я начинаю свой путь с твоих уроков. Скажи пожалуйста,таблица со списком пользователей доступна только разработчику? А то будет не очень,если у пользователя будут выводиться ники и пароли других юзеров)
Помогите ! После того как 1-ый пользователь был создан и добавлен в базу данных - если перезагружаю телеграмм бота, то он уже не предлагает регистрировать пользователя, а просто показывает список с 1-ым пользователем. Только после удаления базы данных, можно повторить процедуру. В чём может быть проблема?
А это не проблема. Файл БД хранит данные независимо от перезагрузки бота. Надо тогда удалять юзера, напр. прописать в коде что при остановке бота БД очищается.
Я уже в агонии пишу этот под каждым видео в надежде на помощь. Мой бот работает с геолокацией получаемой через location но у меня есть необходимость разграничить координаты полученные через геолокацию телефона и координаты полученные через кнопку телеграм "выбрать вручную", которая появляется если отключена геолокация на телефоне
Гоша, почему у меня это поле с Execute просто зеленое внутри скобок, как обычный текст? А у тебя выделено как команды. При том, что всё равно работает. Что это?