Initial release: async repository layer over SQLModel

This commit is contained in:
2026-08-13 22:25:59 +03:00
commit 3d85c2b5dd
26 changed files with 2252 additions and 0 deletions

52
examples/basic_usage.py Normal file
View 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())