model.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """Database built into Pynecone."""
  2. import sqlmodel
  3. from pynecone import utils
  4. from pynecone.base import Base
  5. def get_engine():
  6. """Get the database engine.
  7. Returns:
  8. The database engine.
  9. """
  10. url = utils.get_config().db_url
  11. return sqlmodel.create_engine(url, echo=False)
  12. class Model(Base, sqlmodel.SQLModel):
  13. """Base class to define a table in the database."""
  14. # The primary key for the table.
  15. id: int = sqlmodel.Field(primary_key=True)
  16. def dict(self, **kwargs):
  17. """Convert the object to a dictionary.
  18. Args:
  19. kwargs: Ignored but needed for compatibility.
  20. Returns:
  21. The object as a dictionary.
  22. """
  23. return {name: getattr(self, name) for name in self.__fields__}
  24. @staticmethod
  25. def create_all():
  26. """Create all the tables."""
  27. engine = get_engine()
  28. sqlmodel.SQLModel.metadata.create_all(engine)
  29. @classmethod
  30. @property
  31. def select(cls):
  32. """Select rows from the table.
  33. Returns:
  34. The select statement.
  35. """
  36. return sqlmodel.select(cls)
  37. def session(url=None):
  38. """Get a session to interact with the database.
  39. Args:
  40. url: The database url.
  41. Returns:
  42. A database session.
  43. """
  44. if url is not None:
  45. return sqlmodel.Session(sqlmodel.create_engine(url))
  46. engine = get_engine()
  47. return sqlmodel.Session(engine)