DogAcademyGame/database/db_session.py
Xatiko 815f432536 Исправлена админ-панель: работа с бд теперь доступна (нужно добавить кнопки), добавлены кнопки 'Открыть сессию пользователя' - для того чтобы администратор мог открыть игру, не выходя из админ-панели, создав при этом дополнительное окно, и 'Выйти'(бургер-меню) - закрыть приложение. Исправлен процесс регистрации: при регистрации пользователя данные из таблицы Auth автоматически переносятся в таблицу Users и GameSession для дальнейшего просмотра, редактирования, удаления данных в админ-панели, добавлен параметр username для корректрой работы базы данных и процесса регистрации, исправлен интерфейс: добавлены наименования полей, для удобства пользователя. Изменения в коде: работа с бд перенесена в файл с интерфейсом админ-панели, потому что Python по-другому не воспринимает мои страдания((( Изменения в логировании: при запуске игры создаётся/обновляется файл game.log (импортировать в админ-панель, также как и logfile.log).
2024-11-28 17:17:19 +03:00

49 lines
2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from config import DATABASE_URL
from database.models import Base
import os
# Создание движка SQLAlchemy
engine = create_engine(DATABASE_URL, echo=True)
# Создание фабрики сессий
Session = sessionmaker(bind=engine, autoflush=True)
# Переменная для хранения текущей сессии
current_session = None
def create_session():
"""Создаёт сессию для работы с базой данных."""
return Session()
def init_db(refresh=False):
"""
Инициализация базы данных: создание файла и таблиц.
Если `refresh` равно True, удаляет и пересоздаёт таблицы.
"""
global current_session
if not os.path.exists("database/DogAcademy.db") or refresh:
if refresh:
print("Обновление базы данных: удаление старых таблиц...")
Base.metadata.drop_all(bind=engine) # Удаляем все таблицы
print("Создание базы данных и таблиц...")
Base.metadata.create_all(bind=engine) # Создаём таблицы заново
else:
print("База данных уже существует. Обновление не требуется.")
# Инициализация сессии при запуске
current_session = get_session()
def get_session():
"""Возвращает сессию для работы с базой данных."""
return Session() # Просто возвращаем объект сессии
def close_sessions():
"""Закрытие всех сессий перед выходом из программы."""
if current_session:
print("Закрытие сессии...")
current_session.close()
else:
print("Нет активной сессии для закрытия.")