Building Data-Driven Web Apps with Flask and SQLAlchemy Transcripts
Chapter: MongoDB edition
Lecture: Package details cleanup
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
We've cleaned up the homepage.
0:01
Now let's just click on one of these
0:02
and see how amazing this is.
0:04
Oh, darn it, not so amazing.
0:05
Remember we had the relationship
0:07
from release over to package.
0:08
Well now we're running into the issue
0:09
but in the other direction.
0:11
We will go into a package and asking for its releases.
0:14
So we just need to change a little bit how this works
0:16
in order to match with our new data model.
0:18
So what we need to do is let's close these off
0:22
and it turns out that the error is actually right here.
0:27
We can go show you that
0:29
if we just scroll down and click right there.
0:31
It's this, it says, hey, we don't given a package
0:34
it doesn't have our releases.
0:36
Well, what are we really trying to do here?
0:38
We're trying to go to this and say
0:39
well, if there's a package, go get me its latest release
0:42
so we can set the latest release in the latest version text.
0:46
So let's just change how this works.
0:47
Let's say self.latest_release = package_service.
0:51
get_latest_release_for_package(self.package.id)
0:59
Like so.
1:00
Now, this function doesn't exist yet
1:03
but we're going to write in a second.
1:04
Now, let's just fix this up really quick here.
1:05
So the goal over here was to say, go to the
1:09
and get us the latest release that's already done
1:12
and then it's here's to say what is the text
1:14
for that latest one.
1:16
We probably want to add one more check
1:18
if there is actually a latest release, okay.
1:22
If we make this change and we write this function
1:24
this page, this package details page
1:26
should be back in action.
1:27
So let's go write this.
1:29
It's going to be package_id, which is a string.
1:32
What's going to give it?
1:33
What are we getting back?
1:34
We're getting an optional of release. Okay.
1:38
We want to do a query on releases, super easy.
1:40
We go to release, we say objects
1:41
and we don't need to use filter here.
1:43
We can just put it right inside of object
1:46
and say package_id equals package_id
1:50
that we're passing in and we want to do an order by.
1:55
What do you want to order by?
1:56
Let's go over here. created_date.
1:58
We want the latest one, remember?
2:00
So we say, - that and then here we say .first.
2:04
Give us one or None and that's it.
2:07
That will fix this or go to the database, do a query
2:09
get us the latest release for our package.
2:12
And here you can see we have an index on created_date
2:15
and the thing we're sorted on as well as the package_id.
2:18
So this should be really, really fast.
2:21
All right, let's go and see how this works.
2:25
Try again. No, what have we missed?
2:29
Oh we still are doing this test
2:31
even though it doesn't make sense anymore.
2:34
Try again. Tada, there we go.
2:36
Our site is fully back in action
2:38
and we can come down here and see all the details
2:40
here you can see we got our latest release for that one
2:43
on 2018 in May 30th. Super.
2:47
So we've now done a little tiny cleanup that we had to do
2:50
based on the change in the structure and the data model
2:53
and now our app is back and working and that's it.
2:55
We've converted this app over to MongoDB.
2:58
I've done a lot of talking and not that much typing.
3:00
If I just went and heads down
3:01
and started converting and converting
3:03
you can see this would go pretty quick.
3:05
We did come with the MongoDB data model already done
3:08
so I don't know. What do you think?
3:10
An hour, two hours to do this conversion.
3:12
That's not a ton of work and why is it not a ton of work?
3:14
Because we were able to change just these couple of files
3:17
'cause all of the data access was there
3:19
and because we're using MongoEngine
3:21
it was very similar in the way we wrote our queries
3:24
and got objects back
3:26
to the way that we work with sequel alchemy.
3:28
Super cool on both counts.