🎨 Run pre-commit on all files and autoformat (#666)
This commit is contained in:
committed by
GitHub
parent
7f72c60ae4
commit
27a81b2112
@@ -198,9 +198,9 @@ INFO Engine COMMIT
|
||||
|
||||
// And now our prints
|
||||
After committing the session
|
||||
Hero 1:
|
||||
Hero 2:
|
||||
Hero 3:
|
||||
Hero 1:
|
||||
Hero 2:
|
||||
Hero 3:
|
||||
|
||||
// What is happening here? 😱
|
||||
```
|
||||
@@ -275,17 +275,17 @@ $ python app.py
|
||||
|
||||
// After committing, the objects are expired and have no values
|
||||
After committing the session
|
||||
Hero 1:
|
||||
Hero 2:
|
||||
Hero 3:
|
||||
Hero 1:
|
||||
Hero 2:
|
||||
Hero 3:
|
||||
|
||||
// Now we will access an attribute like the ID, this is the first print
|
||||
After committing the session, show IDs
|
||||
|
||||
// Notice that before printing the first ID, the Session makes the Engine go to the database to refresh the data 🤓
|
||||
INFO Engine BEGIN (implicit)
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00017s] (1,)
|
||||
|
||||
@@ -293,8 +293,8 @@ INFO Engine [generated in 0.00017s] (1,)
|
||||
Hero 1 ID: 1
|
||||
|
||||
// Before the next print, refresh the data for the second object
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.001245s ago] (2,)
|
||||
|
||||
@@ -302,8 +302,8 @@ INFO Engine [cached since 0.001245s ago] (2,)
|
||||
Hero 2 ID: 2
|
||||
|
||||
// Before the third print, refresh its data
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.002215s ago] (3,)
|
||||
|
||||
@@ -365,20 +365,20 @@ $ python app.py
|
||||
// Output above omitted 👆
|
||||
|
||||
// The first refresh
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00024s] (1,)
|
||||
|
||||
// The second refresh
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.001487s ago] (2,)
|
||||
|
||||
// The third refresh
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.002377s ago] (3,)
|
||||
|
||||
@@ -468,12 +468,12 @@ INFO Engine PRAGMA main.table_info("hero")
|
||||
INFO Engine [raw sql] ()
|
||||
INFO Engine PRAGMA temp.table_info("hero")
|
||||
INFO Engine [raw sql] ()
|
||||
INFO Engine
|
||||
INFO Engine
|
||||
CREATE TABLE hero (
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
|
||||
@@ -497,23 +497,23 @@ INFO Engine INSERT INTO hero (name, secret_name, age) VALUES (?, ?, ?)
|
||||
INFO Engine [cached since 0.001483s ago] ('Rusty-Man', 'Tommy Sharp', 48)
|
||||
INFO Engine COMMIT
|
||||
After committing the session
|
||||
Hero 1:
|
||||
Hero 2:
|
||||
Hero 3:
|
||||
Hero 1:
|
||||
Hero 2:
|
||||
Hero 3:
|
||||
After committing the session, show IDs
|
||||
INFO Engine BEGIN (implicit)
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00029s] (1,)
|
||||
Hero 1 ID: 1
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.002132s ago] (2,)
|
||||
Hero 2 ID: 2
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.003367s ago] (3,)
|
||||
Hero 3 ID: 3
|
||||
@@ -521,16 +521,16 @@ After committing the session, show names
|
||||
Hero 1 name: Deadpond
|
||||
Hero 2 name: Spider-Boy
|
||||
Hero 3 name: Rusty-Man
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00025s] (1,)
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.001583s ago] (2,)
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.002722s ago] (3,)
|
||||
After refreshing the heroes
|
||||
|
||||
@@ -159,7 +159,7 @@ As the `Hero` class model now has a field (column, attribute) `team_id`, we can
|
||||
|
||||
We haven't committed this hero to the database yet, but there are already a couple of things to pay **attention** to.
|
||||
|
||||
If the database already had some teams, we wouldn't even know **what is the ID** that is going to be automatically assigned to each team by the database, for example, we couldn't just guess `1` or `2`.
|
||||
If the database already had some teams, we wouldn't even know **what is the ID** that is going to be automatically assigned to each team by the database, for example, we couldn't just guess `1` or `2`.
|
||||
|
||||
But once the team is created and committed to the database, we can access the object's `id` field to get that ID.
|
||||
|
||||
@@ -171,8 +171,8 @@ That line alone would generate an output of:
|
||||
|
||||
```
|
||||
INFO Engine BEGIN (implicit)
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [generated in 0.00025s] (2,)
|
||||
```
|
||||
@@ -199,8 +199,8 @@ Let's now create two more heroes:
|
||||
When creating `hero_rusty_man`, we are accessing `team_preventers.id`, so that will also trigger a refresh of its data, generating an output of:
|
||||
|
||||
```
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [cached since 0.001795s ago] (1,)
|
||||
```
|
||||
@@ -256,18 +256,18 @@ $ python app.py
|
||||
INFO Engine BEGIN (implicit)
|
||||
|
||||
// Refresh the first hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00021s] (1,)
|
||||
// Refresh the second hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.001575s ago] (2,)
|
||||
// Refresh the third hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.002518s ago] (3,)
|
||||
|
||||
|
||||
@@ -191,24 +191,24 @@ INFO Engine PRAGMA temp.table_info("hero")
|
||||
INFO Engine [raw sql] ()
|
||||
|
||||
// Create the tables
|
||||
INFO Engine
|
||||
INFO Engine
|
||||
CREATE TABLE team (
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
headquarters VARCHAR NOT NULL,
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
headquarters VARCHAR NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
|
||||
|
||||
INFO Engine [no key 0.00010s] ()
|
||||
INFO Engine
|
||||
INFO Engine
|
||||
CREATE TABLE hero (
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
team_id INTEGER,
|
||||
PRIMARY KEY (id),
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
team_id INTEGER,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY(team_id) REFERENCES team (id)
|
||||
)
|
||||
|
||||
@@ -229,9 +229,9 @@ So, the first SQL could also be written as:
|
||||
|
||||
```SQL
|
||||
CREATE TABLE team (
|
||||
id INTEGER,
|
||||
name TEXT NOT NULL,
|
||||
headquarters TEXT NOT NULL,
|
||||
id INTEGER,
|
||||
name TEXT NOT NULL,
|
||||
headquarters TEXT NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
```
|
||||
@@ -240,12 +240,12 @@ And the second table could be written as:
|
||||
|
||||
```SQL hl_lines="8"
|
||||
CREATE TABLE hero (
|
||||
id INTEGER,
|
||||
name TEXT NOT NULL,
|
||||
secret_name TEXT NOT NULL,
|
||||
age INTEGER,
|
||||
team_id INTEGER,
|
||||
PRIMARY KEY (id),
|
||||
id INTEGER,
|
||||
name TEXT NOT NULL,
|
||||
secret_name TEXT NOT NULL,
|
||||
age INTEGER,
|
||||
team_id INTEGER,
|
||||
PRIMARY KEY (id),
|
||||
FOREIGN KEY(team_id) REFERENCES team (id)
|
||||
)
|
||||
```
|
||||
|
||||
@@ -203,8 +203,8 @@ $ python app.py
|
||||
// Previous output omitted 😉
|
||||
|
||||
// Get the heroes with their teams
|
||||
2021-08-09 08:55:50,682 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
FROM hero, team
|
||||
2021-08-09 08:55:50,682 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
FROM hero, team
|
||||
WHERE hero.team_id = team.id
|
||||
2021-08-09 08:55:50,682 INFO sqlalchemy.engine.Engine [no key 0.00015s] ()
|
||||
|
||||
@@ -323,7 +323,7 @@ $ python app.py
|
||||
// Previous output omitted 😉
|
||||
|
||||
// Select using a JOIN with automatic ON
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
FROM hero JOIN team ON team.id = hero.team_id
|
||||
INFO Engine [no key 0.00032s] ()
|
||||
|
||||
@@ -458,7 +458,7 @@ $ python app.py
|
||||
// Previous output omitted 😉
|
||||
|
||||
// SELECT using LEFT OUTER JOIN
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
FROM hero LEFT OUTER JOIN team ON team.id = hero.team_id
|
||||
|
||||
INFO Engine [no key 0.00051s] ()
|
||||
@@ -522,9 +522,9 @@ If we run that, it would output:
|
||||
$ python app.py
|
||||
|
||||
// Select only the hero data
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
// But still join with the team table
|
||||
FROM hero JOIN team ON team.id = hero.team_id
|
||||
FROM hero JOIN team ON team.id = hero.team_id
|
||||
// And filter with WHERE to get only the Preventers
|
||||
WHERE team.name = ?
|
||||
INFO Engine [no key 0.00066s] ('Preventers',)
|
||||
@@ -564,9 +564,9 @@ And if we run that, it will output:
|
||||
$ python app.py
|
||||
|
||||
// Select the hero and the team data
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id, team.id AS id_1, team.name AS name_1, team.headquarters
|
||||
// Join the hero with the team table
|
||||
FROM hero JOIN team ON team.id = hero.team_id
|
||||
FROM hero JOIN team ON team.id = hero.team_id
|
||||
// Filter with WHERE to get only Preventers
|
||||
WHERE team.name = ?
|
||||
INFO Engine [no key 0.00018s] ('Preventers',)
|
||||
|
||||
@@ -56,7 +56,7 @@ We can simply set the `team_id` to `None`, and now it doesn't have a connection
|
||||
# Code above omitted 👆
|
||||
|
||||
{!./docs_src/tutorial/connect/delete/tutorial001.py[ln:31-32]!}
|
||||
|
||||
|
||||
# Previous code here omitted 👈
|
||||
|
||||
{!./docs_src/tutorial/connect/delete/tutorial001.py[ln:68-72]!}
|
||||
@@ -94,8 +94,8 @@ INFO Engine COMMIT
|
||||
// Automatically start a new transaction
|
||||
INFO Engine BEGIN (implicit)
|
||||
// Refresh the hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.1661s ago] (3,)
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ Doing it is just like updating any other field:
|
||||
# Code above omitted 👆
|
||||
|
||||
{!./docs_src/tutorial/connect/update/tutorial001.py[ln:31-32]!}
|
||||
|
||||
|
||||
# Previous code here omitted 👈
|
||||
|
||||
{!./docs_src/tutorial/connect/update/tutorial001.py[ln:62-66]!}
|
||||
@@ -94,8 +94,8 @@ INFO Engine COMMIT
|
||||
// Automatically start a new transaction
|
||||
INFO Engine BEGIN (implicit)
|
||||
// Refresh the hero data
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.08837s ago] (3,)
|
||||
|
||||
|
||||
@@ -422,15 +422,15 @@ INFO Engine PRAGMA main.table_info("hero")
|
||||
INFO Engine [raw sql] ()
|
||||
INFO Engine PRAGMA temp.table_info("hero")
|
||||
INFO Engine [raw sql] ()
|
||||
INFO Engine
|
||||
INFO Engine
|
||||
|
||||
// Finally, the glorious SQL to create the table ✨
|
||||
|
||||
CREATE TABLE hero (
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
|
||||
|
||||
@@ -108,8 +108,8 @@ $ python app.py
|
||||
|
||||
// The SELECT with WHERE
|
||||
INFO Engine BEGIN (implicit)
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00011s] ('Spider-Youngster',)
|
||||
|
||||
@@ -272,8 +272,8 @@ $ python app.py
|
||||
INFO Engine BEGIN (implicit)
|
||||
|
||||
// SQL to search for the hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00013s] ('Spider-Youngster',)
|
||||
```
|
||||
|
||||
@@ -132,7 +132,7 @@ Here are the commands you could use:
|
||||
<div class="termy">
|
||||
|
||||
```console
|
||||
// Remember that you might need to use python3.9 or similar 💡
|
||||
// Remember that you might need to use python3.9 or similar 💡
|
||||
// Create the virtual environment using the module "venv"
|
||||
$ python3 -m venv env
|
||||
// ...here it creates the virtual environment in the directory "env"
|
||||
|
||||
@@ -342,10 +342,10 @@ $ python app.py
|
||||
|
||||
// Create the table
|
||||
CREATE TABLE hero (
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
|
||||
@@ -353,8 +353,8 @@ CREATE TABLE hero (
|
||||
CREATE INDEX ix_hero_name ON hero (name)
|
||||
|
||||
// The SELECT with WHERE looks the same
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00014s] ('Deadpond',)
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ $ python app.py
|
||||
// Previous output omitted 🙈
|
||||
|
||||
// Select with LIMIT
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
LIMIT ? OFFSET ?
|
||||
INFO Engine [no key 0.00014s] (3, 0)
|
||||
@@ -165,7 +165,7 @@ $python app.py
|
||||
// Previous output omitted 🙈
|
||||
|
||||
// Select with LIMIT and OFFSET
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
LIMIT ? OFFSET ?
|
||||
INFO Engine [no key 0.00020s] (3, 3)
|
||||
@@ -221,7 +221,7 @@ $ python app.py
|
||||
// Previous output omitted 🙈
|
||||
|
||||
// Select last batch with LIMIT and OFFSET
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
LIMIT ? OFFSET ?
|
||||
INFO Engine [no key 0.00038s] (3, 6)
|
||||
@@ -241,7 +241,7 @@ You probably noticed the new SQL keywords `LIMIT` and `OFFSET`.
|
||||
You can use them in SQL, at the end of the other parts:
|
||||
|
||||
```SQL
|
||||
SELECT id, name, secret_name, age
|
||||
SELECT id, name, secret_name, age
|
||||
FROM hero
|
||||
LIMIT 3 OFFSET 6
|
||||
```
|
||||
@@ -285,8 +285,8 @@ $ python app.py
|
||||
// Previous output omitted 🙈
|
||||
|
||||
// Select with WHERE and LIMIT
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
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)
|
||||
|
||||
@@ -122,16 +122,16 @@ INFO Engine COMMIT
|
||||
// Automatically start a new transaction
|
||||
INFO Engine BEGIN (implicit)
|
||||
// Refresh the data
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00019s] (1,)
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.001959s ago] (2,)
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.003215s ago] (3,)
|
||||
|
||||
@@ -139,8 +139,8 @@ INFO Engine [cached since 0.003215s ago] (3,)
|
||||
Deadpond: name='Deadpond' age=None id=1 secret_name='Dive Wilson'
|
||||
|
||||
// Accessing the .team attribute triggers a refresh
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
WHERE ? = heroteamlink.hero_id AND team.id = heroteamlink.team_id
|
||||
INFO Engine [generated in 0.00025s] (1,)
|
||||
|
||||
@@ -151,8 +151,8 @@ Deadpond teams: [Team(id=1, name='Z-Force', headquarters='Sister Margaret’s Ba
|
||||
Rusty-Man: name='Rusty-Man' age=48 id=2 secret_name='Tommy Sharp'
|
||||
|
||||
// Accessing the .team attribute triggers a refresh
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
WHERE ? = heroteamlink.hero_id AND team.id = heroteamlink.team_id
|
||||
INFO Engine [cached since 0.001716s ago] (2,)
|
||||
|
||||
@@ -163,8 +163,8 @@ Rusty-Man Teams: [Team(id=2, name='Preventers', headquarters='Sharp Tower')]
|
||||
Spider-Boy: name='Spider-Boy' age=None id=3 secret_name='Pedro Parqueador'
|
||||
|
||||
// Accessing the .team attribute triggers a refresh
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
WHERE ? = heroteamlink.hero_id AND team.id = heroteamlink.team_id
|
||||
INFO Engine [cached since 0.002739s ago] (3,)
|
||||
|
||||
|
||||
@@ -151,35 +151,35 @@ $ python app.py
|
||||
|
||||
// Boilerplate omitted 😉
|
||||
|
||||
INFO Engine
|
||||
INFO Engine
|
||||
CREATE TABLE team (
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
headquarters VARCHAR NOT NULL,
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
headquarters VARCHAR NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
|
||||
|
||||
INFO Engine [no key 0.00033s] ()
|
||||
INFO Engine
|
||||
INFO Engine
|
||||
CREATE TABLE hero (
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
id INTEGER,
|
||||
name VARCHAR NOT NULL,
|
||||
secret_name VARCHAR NOT NULL,
|
||||
age INTEGER,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
|
||||
|
||||
INFO Engine [no key 0.00016s] ()
|
||||
INFO Engine
|
||||
INFO Engine
|
||||
|
||||
// Our shinny new link table ✨
|
||||
CREATE TABLE heroteamlink (
|
||||
team_id INTEGER,
|
||||
hero_id INTEGER,
|
||||
PRIMARY KEY (team_id, hero_id),
|
||||
FOREIGN KEY(team_id) REFERENCES team (id),
|
||||
team_id INTEGER,
|
||||
hero_id INTEGER,
|
||||
PRIMARY KEY (team_id, hero_id),
|
||||
FOREIGN KEY(team_id) REFERENCES team (id),
|
||||
FOREIGN KEY(hero_id) REFERENCES hero (id)
|
||||
)
|
||||
|
||||
|
||||
@@ -165,16 +165,16 @@ INFO Engine COMMIT
|
||||
INFO Engine BEGIN (implicit)
|
||||
|
||||
// Automatically fetch the data on attribute access
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [generated in 0.00028s] (1,)
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
WHERE ? = heroteamlink.team_id
|
||||
INFO Engine [generated in 0.00026s] (1,)
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00024s] (1,)
|
||||
|
||||
@@ -182,12 +182,12 @@ INFO Engine [generated in 0.00024s] (1,)
|
||||
Z-Force hero: name='Deadpond' age=None id=1 secret_name='Dive Wilson' is training: False
|
||||
|
||||
// Automatically fetch the data on attribute access
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [cached since 0.008822s ago] (2,)
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
WHERE ? = heroteamlink.team_id
|
||||
INFO Engine [cached since 0.005778s ago] (2,)
|
||||
|
||||
@@ -195,8 +195,8 @@ INFO Engine [cached since 0.005778s ago] (2,)
|
||||
Preventers hero: name='Deadpond' age=None id=1 secret_name='Dive Wilson' is training: True
|
||||
|
||||
// Automatically fetch the data on attribute access
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.004196s ago] (2,)
|
||||
|
||||
@@ -204,8 +204,8 @@ INFO Engine [cached since 0.004196s ago] (2,)
|
||||
Preventers hero: name='Spider-Boy' age=None id=2 secret_name='Pedro Parqueador' is training: True
|
||||
|
||||
// Automatically fetch the data on attribute access
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.006005s ago] (3,)
|
||||
|
||||
@@ -253,14 +253,14 @@ $ python app.py
|
||||
INFO Engine BEGIN (implicit)
|
||||
|
||||
// Select the hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00014s] ('Spider-Boy',)
|
||||
|
||||
// Select the team
|
||||
INFO Engine SELECT team.id, team.name, team.headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id, team.name, team.headquarters
|
||||
FROM team
|
||||
WHERE team.name = ?
|
||||
INFO Engine [no key 0.00012s] ('Z-Force',)
|
||||
|
||||
@@ -269,18 +269,18 @@ INFO Engine INSERT INTO heroteamlink (team_id, hero_id, is_training) VALUES (?,
|
||||
INFO Engine [generated in 0.00023s] (1, 2, 1)
|
||||
|
||||
// Automatically refresh the data on attribute access
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
WHERE ? = heroteamlink.team_id
|
||||
INFO Engine [cached since 0.01514s ago] (1,)
|
||||
INFO Engine COMMIT
|
||||
INFO Engine BEGIN (implicit)
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.08953s ago] (2,)
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
WHERE ? = heroteamlink.hero_id
|
||||
INFO Engine [generated in 0.00018s] (2,)
|
||||
|
||||
@@ -291,18 +291,18 @@ Updated Spider-Boy's Teams: [
|
||||
]
|
||||
|
||||
// Automatically refresh team data on attribute access
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [cached since 0.1084s ago] (1,)
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
WHERE ? = heroteamlink.team_id
|
||||
INFO Engine [cached since 0.1054s ago] (1,)
|
||||
|
||||
// Print team hero links
|
||||
Z-Force heroes: [
|
||||
HeroTeamLink(team_id=1, is_training=False, hero_id=1),
|
||||
HeroTeamLink(team_id=1, is_training=False, hero_id=1),
|
||||
HeroTeamLink(team_id=1, is_training=True, hero_id=2)
|
||||
]
|
||||
```
|
||||
@@ -350,8 +350,8 @@ $ python app.py
|
||||
// Previous output omitted 🙈
|
||||
|
||||
// Automatically fetch team data on attribute access
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [generated in 0.00015s] (2,)
|
||||
|
||||
@@ -366,16 +366,16 @@ INFO Engine COMMIT
|
||||
INFO Engine BEGIN (implicit)
|
||||
|
||||
// Automatically fetch data on attribute access
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.2004s ago] (2,)
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
INFO Engine SELECT heroteamlink.team_id AS heroteamlink_team_id, heroteamlink.hero_id AS heroteamlink_hero_id, heroteamlink.is_training AS heroteamlink_is_training
|
||||
FROM heroteamlink
|
||||
WHERE ? = heroteamlink.hero_id
|
||||
INFO Engine [cached since 0.1005s ago] (2,)
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [cached since 0.09707s ago] (2,)
|
||||
|
||||
@@ -383,8 +383,8 @@ INFO Engine [cached since 0.09707s ago] (2,)
|
||||
Spider-Boy team: headquarters='Sharp Tower' id=2 name='Preventers' is training: False
|
||||
|
||||
// Automatically fetch data on attribute access
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [cached since 0.2097s ago] (1,)
|
||||
|
||||
|
||||
@@ -115,12 +115,12 @@ INFO Engine COMMIT
|
||||
INFO Engine BEGIN (implicit)
|
||||
|
||||
// Automatically refresh the data while accessing the attribute .teams
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00044s] (3,)
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
WHERE ? = heroteamlink.hero_id AND team.id = heroteamlink.team_id
|
||||
INFO Engine [cached since 0.1648s ago] (3,)
|
||||
|
||||
@@ -131,8 +131,8 @@ Updated Spider-Boy's Teams: [
|
||||
]
|
||||
|
||||
// Automatically refresh the data while accessing the attribute .heores
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero, heroteamlink
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero, heroteamlink
|
||||
WHERE ? = heroteamlink.team_id AND hero.id = heroteamlink.hero_id
|
||||
INFO Engine [cached since 0.1499s ago] (1,)
|
||||
|
||||
@@ -208,12 +208,12 @@ INFO Engine COMMIT
|
||||
INFO Engine BEGIN (implicit)
|
||||
|
||||
// Automatically refresh the data while accessing the attribute .heroes
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team
|
||||
WHERE team.id = ?
|
||||
INFO Engine [generated in 0.00029s] (1,)
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero, heroteamlink
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero, heroteamlink
|
||||
WHERE ? = heroteamlink.team_id AND hero.id = heroteamlink.hero_id
|
||||
INFO Engine [cached since 0.5625s ago] (1,)
|
||||
|
||||
@@ -223,12 +223,12 @@ Reverted Z-Force's heroes: [
|
||||
]
|
||||
|
||||
// Automatically refresh the data while accessing the attribute .teams
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [cached since 0.4209s ago] (3,)
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
INFO Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters
|
||||
FROM team, heroteamlink
|
||||
WHERE ? = heroteamlink.hero_id AND team.id = heroteamlink.team_id
|
||||
INFO Engine [cached since 0.5842s ago] (3,)
|
||||
|
||||
|
||||
@@ -86,8 +86,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// The SELECT with WHERE
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.age <= ?
|
||||
INFO Engine [no key 0.00021s] (35,)
|
||||
|
||||
@@ -132,8 +132,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// The SELECT with WHERE
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.age <= ?
|
||||
INFO Engine [no key 0.00021s] (35,)
|
||||
|
||||
@@ -180,8 +180,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// The SELECT with WHERE
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00015s] ('Deadpond',)
|
||||
|
||||
@@ -203,8 +203,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// The SELECT with WHERE
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00015s] ('Deadpond',)
|
||||
|
||||
@@ -274,8 +274,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// SELECT with WHERE
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.age < ?
|
||||
INFO Engine [no key 0.00014s] (25,)
|
||||
|
||||
@@ -370,8 +370,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// SELECT with WHERE
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00021s] (1,)
|
||||
|
||||
@@ -413,8 +413,8 @@ $ python app.py
|
||||
|
||||
// SELECT with WHERE
|
||||
INFO Engine BEGIN (implicit)
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00024s] (9001,)
|
||||
|
||||
|
||||
@@ -144,10 +144,10 @@ But now, what happens when we print the `preventers_team.heroes`?
|
||||
|
||||
``` hl_lines="3"
|
||||
Preventers Team Heroes again: [
|
||||
Hero(name='Rusty-Man', age=48, id=2, secret_name='Tommy Sharp', team_id=2),
|
||||
Hero(name='Spider-Boy', age=None, id=3, secret_name='Pedro Parqueador', team_id=2, team=None),
|
||||
Hero(name='Tarantula', age=32, id=6, secret_name='Natalia Roman-on', team_id=2),
|
||||
Hero(name='Dr. Weird', age=36, id=7, secret_name='Steve Weird', team_id=2),
|
||||
Hero(name='Rusty-Man', age=48, id=2, secret_name='Tommy Sharp', team_id=2),
|
||||
Hero(name='Spider-Boy', age=None, id=3, secret_name='Pedro Parqueador', team_id=2, team=None),
|
||||
Hero(name='Tarantula', age=32, id=6, secret_name='Natalia Roman-on', team_id=2),
|
||||
Hero(name='Dr. Weird', age=36, id=7, secret_name='Steve Weird', team_id=2),
|
||||
Hero(name='Captain North America', age=93, id=8, secret_name='Esteban Rogelios', team_id=2)
|
||||
]
|
||||
```
|
||||
@@ -182,15 +182,15 @@ Now, if we commit it and print again:
|
||||
When we access `preventers_team.heroes` after the `commit`, that triggers a refresh, so we get the latest list, without **Spider-Boy**, so that's fine again:
|
||||
|
||||
```
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age, hero.team_id AS hero_team_id
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age, hero.team_id AS hero_team_id
|
||||
FROM hero
|
||||
WHERE ? = hero.team_id
|
||||
2021-08-13 11:15:24,658 INFO sqlalchemy.engine.Engine [cached since 0.1924s ago] (2,)
|
||||
|
||||
Preventers Team Heroes after commit: [
|
||||
Hero(name='Rusty-Man', age=48, id=2, secret_name='Tommy Sharp', team_id=2),
|
||||
Hero(name='Tarantula', age=32, id=6, secret_name='Natalia Roman-on', team_id=2),
|
||||
Hero(name='Dr. Weird', age=36, id=7, secret_name='Steve Weird', team_id=2),
|
||||
Hero(name='Rusty-Man', age=48, id=2, secret_name='Tommy Sharp', team_id=2),
|
||||
Hero(name='Tarantula', age=32, id=6, secret_name='Natalia Roman-on', team_id=2),
|
||||
Hero(name='Dr. Weird', age=36, id=7, secret_name='Steve Weird', team_id=2),
|
||||
Hero(name='Captain North America', age=93, id=8, secret_name='Esteban Rogelios', team_id=2)
|
||||
]
|
||||
```
|
||||
@@ -260,9 +260,9 @@ That second print would output:
|
||||
|
||||
```
|
||||
Preventers Team Heroes again: [
|
||||
Hero(name='Rusty-Man', age=48, id=2, secret_name='Tommy Sharp', team_id=2),
|
||||
Hero(name='Tarantula', age=32, id=6, secret_name='Natalia Roman-on', team_id=2),
|
||||
Hero(name='Dr. Weird', age=36, id=7, secret_name='Steve Weird', team_id=2),
|
||||
Hero(name='Rusty-Man', age=48, id=2, secret_name='Tommy Sharp', team_id=2),
|
||||
Hero(name='Tarantula', age=32, id=6, secret_name='Natalia Roman-on', team_id=2),
|
||||
Hero(name='Dr. Weird', age=36, id=7, secret_name='Steve Weird', team_id=2),
|
||||
Hero(name='Captain North America', age=93, id=8, secret_name='Esteban Rogelios', team_id=2)
|
||||
]
|
||||
```
|
||||
|
||||
@@ -111,8 +111,8 @@ That would print a list with all the heroes in the Preventers team:
|
||||
$ python app.py
|
||||
|
||||
// Automatically fetch the heroes
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age, hero.team_id AS hero_team_id
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id AS hero_id, hero.name AS hero_name, hero.secret_name AS hero_secret_name, hero.age AS hero_age, hero.team_id AS hero_team_id
|
||||
FROM hero
|
||||
WHERE ? = hero.team_id
|
||||
INFO Engine [cached since 0.8774s ago] (2,)
|
||||
|
||||
|
||||
@@ -274,7 +274,7 @@ This `session.exec(statement)` will generate this output:
|
||||
|
||||
```
|
||||
INFO Engine BEGIN (implicit)
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine [no key 0.00032s] ()
|
||||
```
|
||||
@@ -455,7 +455,7 @@ In this chapter we are touching some of them.
|
||||
|
||||
### SQLModel's `select`
|
||||
|
||||
When importing from `sqlmodel` the `select()` function, you are using **SQLModel**'s version of `select`.
|
||||
When importing from `sqlmodel` the `select()` function, you are using **SQLModel**'s version of `select`.
|
||||
|
||||
SQLAchemy also has it's own `select`, and SQLModel's `select` uses SQLAlchemy's `select` internally.
|
||||
|
||||
|
||||
@@ -132,8 +132,8 @@ $ python app.py
|
||||
// Some boilerplate and previous output omitted 😉
|
||||
|
||||
// The SELECT with WHERE
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00017s] ('Spider-Boy',)
|
||||
|
||||
@@ -275,8 +275,8 @@ $ python app.py
|
||||
// Previous output omitted 🙈
|
||||
|
||||
// The SQL to SELECT the fresh hero data
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.id = ?
|
||||
INFO Engine [generated in 0.00018s] (2,)
|
||||
```
|
||||
|
||||
@@ -490,8 +490,8 @@ $ python app.py
|
||||
|
||||
// Now the important part, the SELECT with WHERE 💡
|
||||
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.name = ?
|
||||
INFO Engine [no key 0.00014s] ('Deadpond',)
|
||||
|
||||
@@ -726,8 +726,8 @@ This will select the rows `WHERE` the `age` is **greater than or equal** to `35`
|
||||
The equivalent SQL would be:
|
||||
|
||||
```SQL hl_lines="3"
|
||||
SELECT id, name, secret_name, age
|
||||
FROM hero
|
||||
SELECT id, name, secret_name, age
|
||||
FROM hero
|
||||
WHERE age >= 35 AND age < 40
|
||||
```
|
||||
|
||||
@@ -743,8 +743,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// The SELECT statement with WHERE, also using AND
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.age >= ? AND hero.age < ?
|
||||
INFO Engine [no key 0.00014s] (35, 40)
|
||||
|
||||
@@ -838,8 +838,8 @@ $ python app.py
|
||||
// Some boilerplate output omitted 😉
|
||||
|
||||
// The SELECT statement with WHERE, also using OR 🔍
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
INFO Engine SELECT hero.id, hero.name, hero.secret_name, hero.age
|
||||
FROM hero
|
||||
WHERE hero.age <= ? OR hero.age > ?
|
||||
INFO Engine [no key 0.00021s] (35, 90)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user