Не понимаю как из базы данных передать данные в профиль пользователя telegram bot python
я хотел бы сделать то что в заголовке вопроса, но вот в чём подвох допустим: я создаю базу данных, хочу записать туда данные побед пользователя но не понимаю как это сделать, я хочу установить пользователю число побед в его профиле телеграмм бота, только как это сделать? Через функцию add_user(0, "Владимир", 1, 2) И это должно записаться в бд и у пользователя в профиле должна быть информация которою я ввёл в add_user после 2 аргумента
conn = sqlite3.connect('DataAccounts.db', check_same_thread = False)
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS stats (
user_id INT PRIMARY KEY,
user_name TEXT,
survived INT,
infected INT
)""")
conn.commit()
def add_user(user_id: int, user_name: str, survived: int, infected: int):
try:
cursor.execute(f"""UPDATE stats SET survived = ?, infected = ? WHERE user_id = ?""", (survived, infected, user_id))
conn.commit()
except sqlite3.Error as error:
print(error)
Ответы (2 шт):
Итак, функция add_user не добавляет значение в дб а пытается обновить то, чего не существует. Может быть пригодятся мои давние наработки(код подправлен под вашу таблицу)
class SQLighter:
def __init__(self, database):
"""Подключаемся к БД и сохраняем курсор соединения"""
self.connection = sqlite3.connect(database, check_same_thread = False)
self.cursor = self.connection.cursor()
def add_user(self, id,name,survived,infected):
"""Добавляем значение"""
with self.connection:
return self.cursor.execute("INSERT INTO `stats` (user_id, user_name, survived, infected) VALUES(?,?,?,?)", (id,name,survived,infected))
def get_nick(self, id):
'''Эта функция позволяет извлекать нужное значение(в данном случае id) из таблицы stats'''
with self.connection:
return self.cursor.execute("SELECT user_id FROM stats WHERE id = ?", (id,)).fetchall()
def set_fast(self, id):
'''Эта функция позволяет устанавливать значение исходя из параметра id'''
with self.connection:
return self.cursor.execute("UPDATE stats SET infected=X WHERE id=? ", (id))
def close(self):
"""Закрываем соединение с БД"""
self.connection.close()
Вы обновляете данные а не добавляете Ниже приведен пример добавления данных и вывод их в сообщении для пользователя
conn = sqlite3.connect('DataAccounts.db', check_same_thread = False)
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS stats (
user_id INT PRIMARY KEY,
user_name TEXT,
survived INT,
infected INT
)""")
conn.commit()
def add_user(user_id: int, user_name: str, survived: int, infected: int):
try:
cursor.execute("""INSERT INTO stats (user_id, user_name, survived, infected)
VALUES (?, ?, ?, ?)""",
(user_id, user_name, survived, infected))
conn.commit()
except sqlite3.Error as error:
print(error)
@bot.message_handler(commands=['start']
def name(message):
user_id = message.from_user.id
user_name = message.from_user.first_name
survived = 10
infected = 0
add_user(user_id=user_id, user_name=user_name, survived=survived, infected=infected)
for infected, survived, user_name in sql.execute(
f"SELECT user_name, survived, infected FROM stats WHERE user_id ={user_id}"):
bot.send_message(message.chat.id,
f'{user_name[0]\nСтатистика:\nВыжевшие: {survived[0]}\nЗаражение: {infected[0]}')
Результат: Игрок Статистика: Выжившие: 10 Заражение: 0