Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions docs/tutorial/limit-and-offset.md
Original file line number Diff line number Diff line change
Expand Up @@ -271,11 +271,11 @@ Of course, you can also combine `.limit()` and `.offset()` with `.where()` and o

</details>

## Run the Program with Limit and Where on the Command Line
## Run the Program with Limit, Offset, and Where on the Command Line

If we run it on the command line, it will find all the heroes in the database with an age above 32. That would normally be 4 heroes.

But we are limiting the results to only get the first 3:
But we are starting to include after an offset of 1 (so we don't count the first one), and we are limiting the results to only get the first 2 after that:

<div class="termy">

Expand All @@ -284,18 +284,17 @@ $ python app.py

// Previous output omitted 🙈

// Select with WHERE and LIMIT
// Select with WHERE and LIMIT and OFFSET
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
FROM hero
WHERE hero.age > ?
LIMIT ? OFFSET ?
INFO Engine [no key 0.00022s] (32, 3, 0)
INFO Engine [no key 0.00022s] (32, 2, 1)

// Print the heroes received, only 3
// Print the heroes received, only 2
[
Hero(age=35, secret_name='Trevor Challa', id=5, name='Black Lion'),
Hero(age=36, secret_name='Steve Weird', id=6, name='Dr. Weird'),
Hero(age=48, secret_name='Tommy Sharp', id=3, name='Rusty-Man')
Hero(age=36, id=6, name='Dr. Weird', secret_name='Steve Weird'),
Hero(age=48, id=3, name='Rusty-Man', secret_name='Tommy Sharp')
]
```

Expand Down
2 changes: 1 addition & 1 deletion docs_src/tutorial/offset_and_limit/tutorial004.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def create_heroes():

def select_heroes():
with Session(engine) as session:
statement = select(Hero).where(Hero.age > 32).limit(3)
statement = select(Hero).where(Hero.age > 32).offset(1).limit(2)
results = session.exec(statement)
heroes = results.all()
print(heroes)
Expand Down
19 changes: 8 additions & 11 deletions tests/test_tutorial/test_limit_and_offset/test_tutorial004.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,6 @@

from ...conftest import get_testing_print_function

expected_calls = [
[
[
{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35},
{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36},
{"id": 3, "name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48},
]
]
]


def test_tutorial(clear_sqlmodel):
from docs_src.tutorial.offset_and_limit import tutorial004 as mod
Expand All @@ -26,4 +16,11 @@ def test_tutorial(clear_sqlmodel):

with patch("builtins.print", new=new_print):
mod.main()
assert calls == expected_calls
assert calls == [
[
[
{"name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36, "id": 6},
{"name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48, "id": 3},
]
]
]