@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()
  • Вопрос задан
  • 3382 просмотра
Решения вопроса 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}' )


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

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

Войти через центр авторизации
Похожие вопросы