FuckingChat/models/base.py

35 lines
1.1 KiB
Python

"""
models/base.py — declarative base & the Messages model.
"""
from sqlalchemy import create_engine, Integer, String, Text
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker
class Base(DeclarativeBase):
pass
class Messages(Base):
__tablename__ = "messages"
id: Mapped[int] = mapped_column(Integer, primary_key=True)
channel: Mapped[str] = mapped_column(String(32), nullable=False, default="general")
ip: Mapped[str] = mapped_column(String(64), nullable=False)
content: Mapped[str] = mapped_column(Text, nullable=False)
timestamp: Mapped[int] = mapped_column(Integer, nullable=False)
def make_engine(db_cfg):
"""Create a SQLAlchemy engine from DatabaseConfig."""
if db_cfg.engine == "mariadb":
url = (
f"mysql+pymysql://{db_cfg.mariadb_user}:{db_cfg.mariadb_password}"
f"@{db_cfg.mariadb_host}:{db_cfg.mariadb_port}/{db_cfg.mariadb_database}"
)
else:
url = f"sqlite:///{db_cfg.sqlite_path}"
engine = create_engine(url, echo=False)
Base.metadata.create_all(engine)
return engine