Full Web Apps with FastAPI Transcripts
Chapter: Appendix: Using SQLAlchemy
Lecture: Concept: Relationships
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
We saw relationships are extremely powerful and let us imagine as if our code and data were just connected, almost hierarchically
0:09
the way we would in a regular Python program connected not split apart like we do in a database. The way we define these
0:16
we add an orm.relationship field to the class so here we have releases so the relationship is against the release type that we're speaking in terms
0:24
of SQLAlchemy entities, not database and then we're going to do an order_by this can either be a single thing or a list. Probably an iterable actually.
0:32
And so, we're going to pass that in and then we're going to say it back populates package. What does that mean?
0:40
We want this relationship to work in both directions so if we have a package we can see the releases and if we have an individual release.
0:45
We can see the single package that it corresponds to. So, over in the release we're going to do the package_id value to actually store the relationship
0:55
like we would store any value that's a string or an integer whatever it corresponds to in that other field.
1:01
And then we're going to say this is a foreign key and in the foreign key part we speak in terms of database, packages.id. But them we also would like
1:11
to establish that relationship so we say there's ORM relationship for the package type from release back to the package and it back populates releases
1:20
and it's called Package so you can see the symmetry here not too hard to set these up once you have an example. Put them side by side
1:27
you go okay, here's where I fill in the pieces for my particular dataset and then you saw that when we load a package
1:34
it doesn't actually load the releases unless we interact with it. So, if we touch it it'll go back to the database and do the query.
1:41
We also saw that if we create new releases and put them into the release package.releases well, it becomes a list and commit those changes
1:51
that'll actually insert the releases. We work in the same but in the reverse as well if we had set the package on a release
1:58
so it's sort of bidirectional in that sense.