56 lines
No EOL
1.5 KiB
Python
56 lines
No EOL
1.5 KiB
Python
from pydantic import BaseModel
|
|
from typing import List
|
|
|
|
class Person(BaseModel):
|
|
id: int
|
|
name: str
|
|
|
|
async def create(conn):
|
|
await conn.execute('''
|
|
CREATE TABLE IF NOT EXISTS Person (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT UNIQUE
|
|
);''')
|
|
|
|
await insert(conn, Person(id=1, name='Jacob'))
|
|
await insert(conn, Person(id=2, name='Ryan'))
|
|
await insert(conn, Person(id=3, name='Ellie'))
|
|
await insert(conn, Person(id=4, name='Chris'))
|
|
|
|
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])
|
|
|
|
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])
|
|
|
|
async def get_all(conn) -> List[Person]:
|
|
async with conn.execute('''
|
|
SELECT id, name
|
|
FROM Person
|
|
''') as cursor:
|
|
async for row in cursor:
|
|
yield Person(id=row[0], name=row[1])
|
|
|
|
async def insert(conn, person: Person) -> Person:
|
|
cursor = await conn.execute('''
|
|
INSERT INTO Person (name)
|
|
VALUES (?)
|
|
''', (person.name,))
|
|
person.id = cursor.lastrowid
|
|
return person |