poka_ijo/poka_ijo/models.py

42 lines
1.4 KiB
Python

from typing import Optional, List
from sqlmodel import Field, Relationship, SQLModel, create_engine
class ThingTagLink(SQLModel, table=True):
thing_id: Optional[int] = Field(
default=None, foreign_key="thing.id", primary_key=True
)
tag_id: Optional[int] = Field(
default=None, foreign_key="tag.id", primary_key=True
)
class Thing(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
serial_no: str
description: str
count: int
attachments: List["Attachment"] = Relationship(back_populates="thing")
tags: List["Tag"] = Relationship(back_populates="thing", link_model=ThingTagLink)
class Tag(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
tag: str
things: List["Thing"] = Relationship(back_populates="thing", link_model=ThingTagLink)
class Attachment(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
path: str
thing_id: Optional[int] = Field(default=None, foreign_key="thing.id")
thing: Optional[Thing] = Relationship(back_populates="attachments")
sqlite_file_name = "poka-ijo.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
_engine = create_engine(sqlite_url, echo=True)
def engine():
return _engine
def create_db_and_tables():
SQLModel.metadata.create_all(engine())
return engine()