15 lines
2.5 KiB
Plaintext
15 lines
2.5 KiB
Plaintext
{
|
|
"cells": [
|
|
{"cell_type":"markdown","metadata":{},"source":["# 04 — Async CRUD Tutorial\n\n","Demonstrates async session usage. Includes optional SQLite async override."]},
|
|
{"cell_type":"markdown","metadata":{},"source":["## 0. Install (optional)"]},
|
|
{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["# %pip install -e . pytest\n"]},
|
|
{"cell_type":"markdown","metadata":{},"source":["## 1. Optional: SQLite async override for demo\n","If you don't have Postgres ready, configure an async SQLite engine."]},
|
|
{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker\n","from sqlmodel_pg_kit import db, create_all\n","# Keep sync paths on SQLite in-memory for create_all\n","db.cfg = db.DatabaseConfig(host='', port=0, user='', password='', database=':memory:', sslmode='disable')\n","db.engine = db.create_engine('sqlite:///:memory:', echo=False)\n","create_all()\n","# Now override async engine/session to SQLite as well\n","db.async_engine = create_async_engine('sqlite+aiosqlite:///:memory:', echo=False)\n","db.AsyncSessionLocal = async_sessionmaker(db.async_engine, expire_on_commit=False)\n"]},
|
|
{"cell_type":"markdown","metadata":{},"source":["## 2. Async CRUD\n","Clean table, insert, and read back using async session."]},
|
|
{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["import asyncio\n","from typing import Optional\n","from sqlmodel import select, SQLModel, Field\n","from sqlmodel_pg_kit import AsyncRepository, create_all\n","from sqlmodel_pg_kit.db import get_async_session\n","\n","class Hero(SQLModel, table=True):\n"," id: Optional[int] = Field(default=None, primary_key=True)\n"," name: str = Field(index=True)\n"," age: Optional[int] = None\n","\n","create_all()\n","repo = AsyncRepository(Hero)\n","\n","async def amain():\n"," async with get_async_session() as s:\n"," await s.execute(Hero.__table__.delete())\n"," await s.commit()\n"," await repo.create(s, {'name': 'Async Hero', 'age': 7})\n"," res = await s.execute(select(Hero))\n"," heroes = res.scalars().all()\n"," return [h.name for h in heroes]\n","\n","asyncio.run(amain())\n"]}
|
|
],
|
|
"metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"name": "python", "pygments_lexer": "ipython3"}},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|