예제 #1
0
 async def test_filter_by_annotation_upper(self):
     await Tournament.create(name="ToUrnAmEnT")
     await Tournament.create(name="new TOURnament")
     tournaments = await Tournament.annotate(name_upper=Upper("name"))
     self.assertEqual(len(tournaments), 2)
     self.assertSetEqual({t.name_upper
                          for t in tournaments},
                         {"TOURNAMENT", "NEW TOURNAMENT"})
예제 #2
0
async def run():
    Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})

    await Tortoise.open_connections()
    await Tortoise.generate_schemas()
    tournament = await Tournament.create(name="New Tournament", desc="great")
    await tournament.save()
    await Tournament.create(name="Second tournament")
    await Tournament.create(name=" final tournament ")
    await Event(name="Without participants",
                tournament_id=tournament.id).save()
    event = Event(name="Test", tournament_id=tournament.id)
    await event.save()
    participants = []
    for i in range(2):
        team = Team(name=f"Team {(i + 1)}")
        await team.save()
        participants.append(team)
    await event.participants.add(participants[0], participants[1])
    await event.participants.add(participants[0], participants[1])

    print(await Tournament.all().annotate(events_count=Count("events")
                                          ).filter(events_count__gte=1))

    print(await Event.filter(id=event.id).first().annotate(
        lowest_team_id=Min("participants__id")))

    print(await Tournament.all().annotate(events_count=Count("events")
                                          ).order_by("events_count"))

    print(await Event.all().annotate(tournament_test_id=Sum("tournament__id")
                                     ).first())

    print(await Tournament.annotate(clean_desciption=Coalesce("desc")
                                    ).filter(clean_desciption=""))

    print(await Tournament.annotate(trimmed_name=Trim("name")
                                    ).filter(trimmed_name="final tournament"))

    print(await
          Tournament.annotate(name_len=Length("name")
                              ).filter(name_len__gt=len("New Tournament")))

    print(await Tournament.annotate(name_lo=Lower("name")
                                    ).filter(name_lo="new tournament"))
    print(await Tournament.annotate(name_lo=Upper("name")
                                    ).filter(name_lo="NEW TOURNAMENT"))
예제 #3
0
def insensitive_contains(field: Term, value: str) -> Criterion:
    return Upper(Cast(field, SqlTypes.VARCHAR)).like(Upper(f"%{value}%"))
예제 #4
0
def insensitive_exact(field: Term, value: str) -> Criterion:
    return Upper(Cast(field, SqlTypes.VARCHAR)).eq(Upper(f"{value}"))
예제 #5
0
def insensitive_ends_with(field: Term, value: str) -> Criterion:
    return Upper(Cast(field, SqlTypes.VARCHAR)).like(Upper(f"%{value}"))
예제 #6
0
def insensitive_ends_with(field: Term, value: str) -> Criterion:
    return Like(Upper(Cast(field, SqlTypes.VARCHAR)),
                field.wrap_constant(Upper(f"%{escape_like(value)}")))