From 1c23a852edaa956fff073cecc1336e7fa2a090a1 Mon Sep 17 00:00:00 2001 From: Slava M <93727145+SXHRYU@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:04:21 +0300 Subject: [PATCH] create async sql tutorial001 for python3.10 replaced `typing.List` with `list` --- .../async_sql_databases/tutorial001_py310.py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs_src/async_sql_databases/tutorial001_py310.py diff --git a/docs_src/async_sql_databases/tutorial001_py310.py b/docs_src/async_sql_databases/tutorial001_py310.py new file mode 100644 index 0000000000..ab2d0b8b81 --- /dev/null +++ b/docs_src/async_sql_databases/tutorial001_py310.py @@ -0,0 +1,63 @@ +import databases +import sqlalchemy +from fastapi import FastAPI +from pydantic import BaseModel + +# SQLAlchemy specific code, as with any other app +DATABASE_URL = "sqlite:///./test.db" +# DATABASE_URL = "postgresql://user:password@postgresserver/db" + +database = databases.Database(DATABASE_URL) + +metadata = sqlalchemy.MetaData() + +notes = sqlalchemy.Table( + "notes", + metadata, + sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True), + sqlalchemy.Column("text", sqlalchemy.String), + sqlalchemy.Column("completed", sqlalchemy.Boolean), +) + + +engine = sqlalchemy.create_engine( + DATABASE_URL, connect_args={"check_same_thread": False} +) +metadata.create_all(engine) + + +class NoteIn(BaseModel): + text: str + completed: bool + + +class Note(BaseModel): + id: int + text: str + completed: bool + + +app = FastAPI() + + +@app.on_event("startup") +async def startup(): + await database.connect() + + +@app.on_event("shutdown") +async def shutdown(): + await database.disconnect() + + +@app.get("/notes/", response_model=list[Note]) +async def read_notes(): + query = notes.select() + return await database.fetch_all(query) + + +@app.post("/notes/", response_model=Note) +async def create_note(note: NoteIn): + query = notes.insert().values(text=note.text, completed=note.completed) + last_record_id = await database.execute(query) + return {**note.dict(), "id": last_record_id}