migrate db.add, db.update, db.remove to SQLA
This commit is contained in:
parent
6f6354cfac
commit
b91fcd3f55
2 changed files with 34 additions and 9 deletions
|
|
@ -105,6 +105,31 @@ async def test_add_and_get(shared_conn: db.Database):
|
|||
assert m2 == await db.get(models.Movie, id=str(m2.id))
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update(shared_conn: db.Database):
|
||||
async with shared_conn.transaction(force_rollback=True):
|
||||
m = a_movie()
|
||||
await db.add(m)
|
||||
|
||||
assert m == await db.get(models.Movie, id=str(m.id))
|
||||
m.title += "something else"
|
||||
assert m != await db.get(models.Movie, id=str(m.id))
|
||||
|
||||
await db.update(m)
|
||||
assert m == await db.get(models.Movie, id=str(m.id))
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_remove(shared_conn: db.Database):
|
||||
async with shared_conn.transaction(force_rollback=True):
|
||||
m1 = a_movie()
|
||||
await db.add(m1)
|
||||
assert m1 == await db.get(models.Movie, id=str(m1.id))
|
||||
|
||||
await db.remove(m1)
|
||||
assert None == await db.get(models.Movie, id=str(m1.id))
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_find_ratings(shared_conn: db.Database):
|
||||
async with shared_conn.transaction(force_rollback=True):
|
||||
|
|
|
|||
18
unwind/db.py
18
unwind/db.py
|
|
@ -232,12 +232,11 @@ async def add(item):
|
|||
if getattr(item, "_is_lazy", False):
|
||||
item._lazy_init()
|
||||
|
||||
table: sa.Table = item.__table__
|
||||
values = asplain(item, serialize=True)
|
||||
keys = ", ".join(f"{k}" for k in values)
|
||||
placeholders = ", ".join(f":{k}" for k in values)
|
||||
query = f"INSERT INTO {item._table} ({keys}) VALUES ({placeholders})"
|
||||
stmt = table.insert().values(values)
|
||||
async with locked_connection() as conn:
|
||||
await conn.execute(query=query, values=values)
|
||||
await conn.execute(stmt)
|
||||
|
||||
|
||||
ModelType = TypeVar("ModelType")
|
||||
|
|
@ -313,18 +312,19 @@ async def update(item):
|
|||
if getattr(item, "_is_lazy", False):
|
||||
item._lazy_init()
|
||||
|
||||
table: sa.Table = item.__table__
|
||||
values = asplain(item, serialize=True)
|
||||
keys = ", ".join(f"{k}=:{k}" for k in values if k != "id")
|
||||
query = f"UPDATE {item._table} SET {keys} WHERE id=:id"
|
||||
stmt = table.update().where(table.c.id == values["id"]).values(values)
|
||||
async with locked_connection() as conn:
|
||||
await conn.execute(query=query, values=values)
|
||||
await conn.execute(stmt)
|
||||
|
||||
|
||||
async def remove(item):
|
||||
table: sa.Table = item.__table__
|
||||
values = asplain(item, filter_fields={"id"}, serialize=True)
|
||||
query = f"DELETE FROM {item._table} WHERE id=:id"
|
||||
stmt = table.delete().where(table.c.id == values["id"])
|
||||
async with locked_connection() as conn:
|
||||
await conn.execute(query=query, values=values)
|
||||
await conn.execute(stmt)
|
||||
|
||||
|
||||
async def add_or_update_user(user: User):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue