2024-01-13 07:18:25 +00:00
|
|
|
from pydantic import BaseModel
|
2024-05-13 03:59:46 +00:00
|
|
|
from typing import AsyncIterator
|
2024-01-13 07:18:25 +00:00
|
|
|
|
|
|
|
|
class Person(BaseModel):
|
|
|
|
|
id: int
|
|
|
|
|
name: str
|
|
|
|
|
|
|
|
|
|
async def create(conn):
|
2024-01-13 08:44:07 +00:00
|
|
|
await conn.execute('''
|
|
|
|
|
CREATE TABLE IF NOT EXISTS Person (
|
|
|
|
|
id INTEGER PRIMARY KEY,
|
|
|
|
|
name TEXT UNIQUE
|
|
|
|
|
);''')
|
2024-04-25 02:03:30 +00:00
|
|
|
|
2024-05-13 03:59:46 +00:00
|
|
|
async def search_by_name(conn, name: str) -> AsyncIterator[Person]:
|
2024-05-04 04:22:19 +00:00
|
|
|
async with conn.execute('''
|
|
|
|
|
SELECT id, name
|
|
|
|
|
FROM Person
|
|
|
|
|
WHERE name LIKE ?
|
|
|
|
|
''', (f'%{name}%',)) as cursor:
|
|
|
|
|
async for row in cursor:
|
|
|
|
|
yield Person(id=row[0], name=row[1])
|
|
|
|
|
|
|
|
|
|
|
2024-04-25 02:03:30 +00:00
|
|
|
async def get_by_name(conn, name: str) -> Person:
|
|
|
|
|
cursor = await conn.execute('''
|
|
|
|
|
SELECT id, name
|
|
|
|
|
FROM Person
|
|
|
|
|
WHERE name = ?
|
|
|
|
|
''', (name,))
|
|
|
|
|
row = await cursor.fetchone()
|
|
|
|
|
if not row:
|
|
|
|
|
return None
|
|
|
|
|
return Person(id=row[0], name=row[1])
|
2024-01-13 07:18:25 +00:00
|
|
|
|
2024-01-13 08:44:07 +00:00
|
|
|
async def get_by_id(conn, id: int) -> Person:
|
|
|
|
|
cursor = await conn.execute('''
|
|
|
|
|
SELECT id, name
|
|
|
|
|
FROM Person
|
|
|
|
|
WHERE id = ?
|
|
|
|
|
''', (id,))
|
|
|
|
|
row = await cursor.fetchone()
|
|
|
|
|
if not row:
|
|
|
|
|
return None
|
|
|
|
|
return Person(id=row[0], name=row[1])
|
|
|
|
|
|
2024-05-13 03:59:46 +00:00
|
|
|
async def get_all(conn) -> AsyncIterator[Person]:
|
2024-01-13 08:44:07 +00:00
|
|
|
async with conn.execute('''
|
|
|
|
|
SELECT id, name
|
|
|
|
|
FROM Person
|
|
|
|
|
''') as cursor:
|
|
|
|
|
async for row in cursor:
|
|
|
|
|
yield Person(id=row[0], name=row[1])
|
|
|
|
|
|
2024-04-28 03:37:01 +00:00
|
|
|
async def insert_person(conn, person: Person) -> Person:
|
2024-01-13 08:44:07 +00:00
|
|
|
cursor = await conn.execute('''
|
|
|
|
|
INSERT INTO Person (name)
|
|
|
|
|
VALUES (?)
|
|
|
|
|
''', (person.name,))
|
|
|
|
|
person.id = cursor.lastrowid
|
|
|
|
|
return person
|