Как мне правильно сделать таблицы в sqlitestudio для username, attempts, range и записать их в питон? telebot, sqlite3
Я делал бота на угадывание числа, и все работает, но у меня есть функция изменить диапазон генерации числа и изменить кол-во попыток, и если два человека играют, а один из них поменял попытки или диапазон, то он изменится у всех.
Это мой код сохранения в словарь, это была такая интегрированная база данных.
storage = dict()
def init_storage(user_id):
storage[user_id] = dict(attemps=None, random_num=None)
def set_init_storage(user_id, key,value):
storage[user_id][key] = value
def get_init_storage(user_id):
return storage[user_id]
Вот так у меня записывались в эту интегрированную базу данных значения:
set_init_storage(message.chat.id, 'a', default_a)
set_init_storage(message.chat.id, 'b', default_b)
А выводились с помощью:
get_init_storage(message.chat.id) # Получает все значения сразу
get_init_storage(message.chat.id)['attempts'] # Получает одно значение, если ввести его название в квадратные скобы
P.S Как правильно создать таблицу, я имел ввиду какие галочки ставить.
мне надо такую настройку для attempts, range, username.
Использую модуль telebot и sqlite3, версия python - 3.12
Ответы (1 шт):
import sqlite3
def init_storage():
# Здесь можно сделать через try except
con = sqlite3.connect('dbusers.db')
cur = con.cursor()
cur.execute(''' CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
username TEXT NOT NULL,
attempts INTEGER,
range TEXT NOT NULL
) ''')
con.commit()
con.close()
return 0
def set_init_storage(username, attempts, range):
# Здесь можно сделать через try except
# Функция для загрузки по одному, если загрузка массовая не следует каждый раз откр и закр базу
con = sqlite3.connect('dbusers.db')
cur = con.cursor()
cur.execute(''' INSERT INTO users (username, attempts,range)
VALUES (?,?,?) ''', (username, attempts, range))
con.commit()
con.close()
return 0
def get_init_storage(username):
# Здесь можно сделать через try except
# Функция для загрузки по одному, если выборка массовая не следует каждый раз откр и закр базу
# нужно переделать запрос
con = sqlite3.connect('dbusers.db')
cur = con.cursor()
res = cur.execute(''' SELECT id,username,attempts,range FROM users WHERE username=? ''', (username,)).fetchone()
con.close()
return res
def get_init_storage_all_users():
con = sqlite3.connect('dbusers.db')
cur = con.cursor()
res = cur.execute(''' SELECT id,username,attempts,range FROM users ''').fetchall()
con.close()
return res
def main():
init_storage()
for i in [1, 2, 3]:
username, attempts, range = input(' Напишите через пробел username, attempts, range ').split()
set_init_storage(username, attempts, range)
for u in get_init_storage_all_users():
print(u)
username=input('Введите имя пользователя ')
print(get_init_storage(username))
if __name__=='__main__':
main()
После выполнения программы, можно зайти в sqlitestudio и посмотреть таблицы и данные в базе dbusers.db