Задать вопрос
@Liperr

Телеграм бот. SQlite3 как выводить id?

Нужно, чтобы при каждом нажатии пользователя команды /start, его id вносился в таблицу, если его там нет. На данном этапе в таблицу записывается ''built-in function id'' и делается это каждый раз(нужно только, если айди нет). Что добавить, а что убрать? Буду благодарен, если ответ будет подробным, с sqlite работаю впервые.

import telebot
import sqlite3
from telebot import types

bot = telebot.TeleBot('1084130875:AAGB5EfXIMo')
id = str(id)

@bot.message_handler(commands=['start'])
def start(message):
	markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
	btn1 = types.KeyboardButton('Поиск')
	btn2 = types.KeyboardButton('Связь')
	btn3 = types.KeyboardButton('Добавить')
	markup.add(btn1, btn2, btn3)

	send_message = f"<b>Привет {message.from_user.first_name}!</b>"
	bot.send_message(message.chat.id, send_message, parse_mode='html', reply_markup=markup)

	connection = sqlite3.connect("database.db", check_same_thread = True)
	cursor = connection.cursor()

	cursor.execute("CREATE TABLE IF NOT EXISTS users (id)")
	cursor.execute("INSERT OR IGNORE INTO users (id) VALUES (:id)", {"id": id})

	connection.commit()
	connection.close()
  • Вопрос задан
  • 6073 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
shabelski89
@shabelski89
engineer
для начала сделать импорты:
import sqlite3
from sqlite3 import Error
from time import sleep, ctime


вызов всех SQL выражений сделать через функцию:
def post_sql_query(sql_query):
    with sqlite3.connect('my.db') as connection:
        cursor = connection.cursor()
        try:
            cursor.execute(sql_query)
        except Error:
            pass
        result = cursor.fetchall()
        return result


далее нужно создать таблицу в sqlite и в качестве primary key (именно он на уникальность определит) сделать id user:
def create_tables():
    users_query = '''CREATE TABLE IF NOT EXISTS USERS 
                        (user_id INTEGER PRIMARY KEY NOT NULL,
                        username TEXT,
                        first_name TEXT,
                        last_name TEXT,
                        reg_date TEXT);'''
    post_sql_query(users_query)


и функцию регистрации пользователя:
def register_user(user, username, first_name, last_name):
    user_check_query = f'SELECT * FROM USERS WHERE user_id = {user};'
    user_check_data = post_sql_query(user_check_query)
    if not user_check_data:
        insert_to_db_query = f'INSERT INTO USERS (user_id, username, first_name,  last_name, reg_date) VALUES ({user}, "{username}", "{first_name}", "{last_name}", "{ctime()}");'
        post_sql_query(insert_to_db_query )

а дальше вызывать её из хендлера:
create_tables()  # вызываем функцию создания таблицы users


@bot.message_handler(commands=['start'])
def start(message):
    register_user(message.from_user.id, message.from_user.username,
                  message.from_user.first_name, message.from_user.last_name)
    bot.send_message(message.from_user.id, f'Welcome  {message.from_user.first_name}' )


Думаю принцип понятен, далее можно со всеми данными так работать и да код так себе, но должен работать.
Достаточно подробно?)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽