Initial release: async repository layer over SQLModel
This commit is contained in:
52
examples/basic_usage.py
Normal file
52
examples/basic_usage.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import asyncio
|
||||
|
||||
from sqlmodel import Field
|
||||
|
||||
from metaorm import BaseRepository, BaseTable, DatabaseSettings
|
||||
|
||||
|
||||
class UserTable(BaseTable, table=True):
|
||||
__tablename__ = "users"
|
||||
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
name: str
|
||||
email: str = Field(unique=True)
|
||||
|
||||
|
||||
class UserRepository(BaseRepository):
|
||||
def get_db_table(self) -> type[UserTable]:
|
||||
return UserTable
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
settings = DatabaseSettings(dsn="sqlite+aiosqlite:///:memory:")
|
||||
repository = UserRepository(settings=settings)
|
||||
|
||||
await repository.create_tables()
|
||||
|
||||
# Create
|
||||
user = await repository.create_item(
|
||||
UserTable(name="Alice", email="alice@example.com"),
|
||||
)
|
||||
print(f"Created: {user.name}, {user.email}")
|
||||
|
||||
# Read all
|
||||
items = [item async for item in repository.get_items()]
|
||||
print(f"All items: {[(item.name, item.email) for item in items]}")
|
||||
|
||||
# Count
|
||||
count = await repository.get_items_count()
|
||||
print(f"Count: {count}")
|
||||
|
||||
# Update
|
||||
updated = [item async for item in repository.update_items(name="Updated")]
|
||||
print(f"Updated: {[(item.name, item.email) for item in updated]}")
|
||||
|
||||
# Delete
|
||||
await repository.delete_items()
|
||||
count = await repository.get_items_count()
|
||||
print(f"Count after delete: {count}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user