async def test_view(engine): async with engine.acquire() as conn: async for row in conn.execute(users.select()): print(row) async for row in conn.execute(projects.select()): print(row) # await conn.execute(users.delete().where(users.c.name == "A")) res: ResultProxy = None rows: List[RowProxy] = [] res = await conn.execute(users.select()) rows = await res.fetchall() assert len(rows) == 2 res = await conn.execute(projects.select()) rows = await res.fetchall() assert len(rows) == 3 # effect of cascade is that relation deletes as well res = await conn.execute(user_to_projects.select()) rows = await res.fetchall() assert len(rows) == 1 assert not any(row[user_to_projects.c.user_id] == 1 for row in rows)
async def test_insert_user(engine): async with engine.acquire() as conn: # execute + scalar res: ResultProxy = await conn.execute( users.insert().values(**random_user(name="FOO"))) assert res.returns_rows assert res.rowcount == 1 assert res.keys() == ("id", ) user_id = await res.scalar() assert isinstance(user_id, int) assert user_id > 0 # only scalar user2_id: int = await conn.scalar( users.insert().values(**random_user(name="BAR"))) assert isinstance(user2_id, int) assert user2_id == user_id + 1 # query result res: ResultProxy = await conn.execute( users.select().where(users.c.id == user2_id)) assert res.returns_rows assert res.rowcount == 1 assert len(res.keys()) > 1 # DIFFERENT betwen .first() and fetchone() user2: RowProxy = await res.first() # Fetch the first row and then close the result set unconditionally. assert res.closed res: ResultProxy = await conn.execute( users.select().where(users.c.id == user2_id)) user2a: RowProxy = await res.fetchone() # If rows are present, the cursor remains open after this is called. assert not res.closed assert user2 == user2a user2b: RowProxy = await res.fetchone() # If no more rows, the cursor is automatically closed and None is returned assert user2b is None assert res.closed
async def test_view(engine): async with engine.acquire() as conn: async for row in conn.execute(users.select()): print(row) async for row in conn.execute(projects.select()): print(row) # await conn.execute(users.delete().where(users.c.name == "A")) res: ResultProxy = None rows: List[RowProxy] = [] res = await conn.execute(users.select()) rows = await res.fetchall() assert len(rows) == 2 res = await conn.execute(projects.select()) rows = await res.fetchall() assert len(rows) == 3
async def test_own_group(make_engine): engine = await make_engine() sync_engine = make_engine(is_async=False) metadata.drop_all(sync_engine) metadata.create_all(sync_engine) async with engine.acquire() as conn: result = await conn.execute(users.insert().values( **random_user()).returning(literal_column("*"))) user: RowProxy = await result.fetchone() assert not user.primary_gid # now fetch the same user that shall have a primary group set by the db result = await conn.execute(users.select().where(users.c.id == user.id) ) user: RowProxy = await result.fetchone() assert user.primary_gid # now check there is a primary group result = await conn.execute( groups.select().where(groups.c.type == GroupType.PRIMARY)) primary_group: RowProxy = await result.fetchone() assert primary_group.gid == user.primary_gid groups_count = await conn.scalar( select([func.count(groups.c.gid) ]).where(groups.c.gid == user.primary_gid)) assert groups_count == 1 relations_count = await conn.scalar( select([func.count()]).select_from(user_to_groups)) assert relations_count == 2 # own group + all group # try removing the primary group with pytest.raises(ForeignKeyViolation): await conn.execute( groups.delete().where(groups.c.gid == user.primary_gid)) # now remove the users should remove the primary group await conn.execute(users.delete().where(users.c.id == user.id)) users_count = await conn.scalar( select([func.count()]).select_from(users)) assert users_count == 0 groups_count = await conn.scalar( select([func.count()]).select_from(groups)) assert groups_count == 1 # the all group is still around relations_count = await conn.scalar( select([func.count()]).select_from(user_to_groups)) assert relations_count == (users_count + users_count)