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
예제 #4
0
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)