@XSK4R

Как настроить бд для телеграм бота?

Всем привет! Изучил уже массу информации, но так и не пришел к дзену.

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

import telebot
from telebot import types # для указание типов
import sqlite3
import time 

token = 'токен' # токен поменять! 
bot = telebot.TeleBot(token)

connection = sqlite3.connect('db.db',check_same_thread = False)
cursor = connection.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users ( -- всё что после -- комментарий SQL
    id INTEGER PRIMARY KEY, -- идентификатор пользователя, он же первичный ключ таблицы
    first_use REAL, -- метка времени, когда пользователь впервые обратился к боту
    last_use REAL -- метка времени, когда пользователь последний раз обратился к боту
)""")
cursor.close()

@bot.message_handler(commands=['start'])
def ensure_user_stats (user_id: INTEGER, first_use: REAL, last_use: REAL):
    global connection
    cursor = connection.cursor()
    now = time.time()
    # Добавить строку с указанным id, и фиксируем текущее время  first_use и last_use 
    # если возникает конфликт в поле id 
    # то мы обновляем в этой записи поле last_use на текущее время
    cursor.execute("""INSERT INTO users (id, first_use, last_use) VALUES (?, ?, ?)
    ON CONFLICT (id) DO UPDATE SET last_use = excluded.last_use""", (user_id, now, now))
    conn.commit()


При кнопке старт, просто крашится и оставляет такую ошибку
Ошибка:line 28, in ensure_user_stats
cursor.execute("""INSERT INTO users (id, first_use, last_use) VALUES (?, ?, ?)
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.

Записей в бд нет, подключение с бд есть, таблицу создает, если ее нет.

Пишет, что проблема в типах, но как их обозначить?? чтобы он спокойно записывал всю, ту инфу, что нужна и как должен выглядеть код ?
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DF0rig
clay
Не совсем понятно к какому типу относятся переменные (id, first_use, last_use). Для этого сделайте:
print(type(id))
print(type(first_use))
print(type(last_use))


Далее у вас будет вывод с типом. Например числа типа int, строка str, и тд. Если у вас переменная является числом, нужно вместо
INSERT INTO users (id) VALUES (?)
Написать:
INSERT INTO users (int(id)) VALUES (?)

Попробуйте так же с типами других переменных
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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