Eve: Building RESTful APIs with MongoDB and Flask Transcripts
Chapter: Appendix: Deploying MongoDB
Lecture: Connecting to MongoDB via Python
0:01 Let's go back to our little play-around service app,
0:04 I'll go and run this for you, it probably looks familiar,
0:07 remember our service central version 2.0, this is demo edition
0:11 let me actually change that little header to prod edition, not that it much matters,
0:16 but we're going to set this up to run in our production environment.
0:19 If I try to do things like list the car, it will show me my local cars
0:24 because I'm running on my Mac, however if I push this up to the server
0:28 and I put it onto that fake web server server,
0:32 it's going to try to talk to local host and have a big fall,
0:35 right that's not going to work well.
0:38 So instead, what we need to do is we need to do is
0:41 we need to go and adjust our little connection bit here.
0:45 Now, let me go and actually add some parameters to this
0:50 we're going to add a password, say user, a password,
0:57 a port, a server, use ssl, and I think that'll do, okay.
1:07 So now I want to use those things to actually connect,
1:10 so we're going to have like this dual mode thing going on,
1:15 and I'll do it like this, we'll say if user or password,
1:20 so if either of those are set we're going to do something else,
1:24 we're going to just fall back and just do this little simple bit or right here,
1:30 here I'll do a print, registering dev connection,
1:35 so go like this, and it is not going to love it,
1:40 so let's go over here and give this some defaults, so none for all of these;
1:46 default here's to 27017, server=local host and use_ssl = false
2:01 actually let's go and default that to true.
2:06 Okay so now I should be able to run this here and list cars
2:11 actually up here we'll see registering dev connection
2:16 and let's put a little kind of indicator, something to the say
2:22 hey this is like an extra thing, so go over here and we'll say registering prod connection
2:32 and I want to give it some extra info, and let's hold off
2:36 and what goes there just for a second,
2:39 okay so we want to gather this up, we actually have to pass more information than this
2:42 and just to make sort of recording how we connected a little bit easier,
2:46 I'm going to create this dictionary where we set all these,
2:51 so username is this, password, server, port, authentication sources, admin
2:55 authentication mechanism is SCRAM-SHA-1,
2:59 ssl is, use ssl and we have to say ignore the self signed certificate
3:04 if we don't do this, it will say your certificate is not valid.
3:09 Now PyCharm warns that this thing is basically missing from ssl
3:15 but it's not, just ignore that.
3:17 So we're going to come over here, and we're going to do this as well
3:22 let's go and say, actually let me change the order real quick,
3:29 so we're going to say all of these are keyword arguments for this method
3:32 so we can just say **data
3:35 and that's going to basically set username= user, password = password and so on,
3:39 why did I put it like this— because I'd like to capture all those details.
3:42 So let me just do really quick data of password equals this,
3:52 and then I'll just print out this dictionary here
3:56 so registering, production, connection with those details.
3:59 Okay, so if you pass a username or password in
4:03 it's going to work differently, let's just make sure everything still runs
4:06 can I list the cars, see the dev connection, yeah, excellent.
4:11 So things are still working good on of the dev side of the story.
4:14 The next thing we've got to do is come over here where we're calling this,
4:18 and let's just go ahead and pass in all the details here.
4:25 We wanted to use ssl that defaults to true, so that's all good.
4:31 Now if I run this, you're going to see not amazing stuff
4:35 so like list is probably going to time out, it takes a while for it to time actually,
4:40 let's try to renegotiate the connection and it really doesn't want to crash
4:43 but eventually this is going to timeout,
4:46 we already saw we can't connect to the server here.
4:49 So let me push this up to the git repository
4:55 and then we'll get it on to the server and production and make sure everything works.
5:00 I pushed those changes to github and let's go over to the web server
5:05 see I am already here, I'm just in my home directory/root
5:10 so what I want to do is I want to go and get that code over here,
5:14 so we're going to go and go to the github repository for our code here
5:20 notice when I do a refresh, you should see
5:22 that I just added now with production capabilities,
5:26 so let's copy this, and let's say git clone this, its a public repository
5:31 so I don't need any credentials or any of that business.
5:39 Okay, so things are good, we'll go to Mongo and notice there's a source
5:44 and I have 09 deploys, so if we look in here,
5:50 we've got service central deploy and service starter,
5:55 server central deploy is the starter obviously it's what we started with,
5:58 the service central deploys is the one that we just changed;
6:03 so for example, if we look at this
6:08 you can see it's using this complicated version here,
6:12 if we look at this one, you can see we're setting a MongoDB just the way we like.
6:18 Okay, so now what we have to do is run it and let's go over here
6:24 connect to the MongoDb server and say show dbs,
6:29 hey there's nothing here, so let's go and run this,
6:33 so we've got our service deploy, so we'll say it Python 3
6:36 we didn't use a … or change its execution states.
6:41 Now one thing we need is we need to install Mongoengine of course
6:44 so let's do this, we'll just let Python do it,
6:47 so we'll save Python 3 -m venv to create a virtual environment,
6:56 here we need to apt install Python 3 -venv, try again,
7:08 so now we'll source activate this and our prompt changes.
7:15 Okay good, so now we should be able to run our Python 3 thing again,
7:19 oh yeah, well it's active, we still need to pip install Mongoengine
7:23 and that'll take PyMongo along with it.
7:27 I believe that failed building a wheel because set up tools is out of date,
7:32 anyway, it should still work. Let's give this another shot,
7:36 now we have Mongoengine registered in a virtual environment,
7:39 a virtual environment is active, our code is here
7:42 a lot of deployment stuff, let's go.
7:45 Oh, look at that, so now we're registering the production connection,
7:48 I mean, you probably don't want to print this out all the time
7:51 but notice the hosts, authentication, everything,
7:54 it seemed to take it like the register worked
7:56 we haven't tried to talk to the database yet, let's try to list the cars.
7:59 There are no cars, did that make in a dent?
8:04 No, no dent yet. Let's add a car this is going to be an F40,
8:10 it's going to be built in 2010, that didn't crash, let's try to list the cars,
8:17 look at that, let's add a service record, service that car.
8:24 The vin number is that, the price of the service is a thousand dollars
8:30 and this is going to be a new tires, the customer is extremely happy, loved it.
8:36 Now we've got our new tires, so look at this, show dbs,
8:40 use demo dealership, show collections, db.cars.find.pretty
8:52 bam, look at that, we were able to make our Python code
8:58 on the right machine with all the right settings,
9:00 and all the farewell rules and everything,
9:04 go over and talk to the MongoDB server.
9:06 This is pretty excellent, we can go add another car
9:10 obviously like at this point once you see it creating some documents
9:13 and working to some degree everything is going to work, right,
9:16 there's really nothing to it, so this is excellent,
9:19 let me just go create one more car so we have two things,
9:22 this is going to be Enzo and this was build very recently
9:29 let's list the cars and add a service record for it.
9:33 The Enzo needs some work, so for a 100 dollars that will be oil change,
9:40 pretty happy, yeah, one more, the same car,
9:47 this is going to be 250 tire rotation moderately happy,
9:53 so let's go over here and do this again.
9:56 There we go, we've got our Enzo with two service histories
9:59 our F40 with one service history and so on.
10:02 Okay excellent, so it looks like this is working,
10:05 I added this other record here so we have a little bit of data
10:08 because the next thing that we want to look at is how do we manage this,
10:11 how do we connect our database management tools
10:14 and backup things and what not to.
10:16 As far as Python goes, this baby is rocking.
10:19 I guess maybe connect one more time, boom, list the cars,
10:23 there they are, yeah looks good to me.