Python-powered chat apps with Twilio and SendGrid Transcripts
Chapter: Using our database with the SQLAlchemy ORM
Lecture: SQLAlchemy session and unit of work pattern

Login or purchase this course to watch this video and the rest of the course contents.
0:00 The final thing to use these SQLAlchemy classes is to go through a couple of
0:05 steps, create what's called an engine,
0:06 which takes a connection string. Use that to work with our
0:10 SQLAlchemy Base, to bind them together.
0:12 Use the SQLAlchemy base to create the database and the tables and all those sorts
0:17 of things. This is exactly the same for every single SQLAlchemy Project you ever
0:22 work on the We have a little nicer version to work with.
0:25 Let me just paste file in here that we're going to just talk about.
0:28 I'm going to call it session.
0:30 Now it's going to have a single function that we call it Apps Startup,
0:32 where we specify basically the connection string.
0:35 We're going to use SQLlite.
0:37 You can use any database you want.
0:39 POSTGRES, SQL Server, My SQL Any relational database almost is supported by SQLAlchemy,
0:46 but I don't want to have to have you set up a separate database server and
0:50 have the connection, the network connections and permissions and all that stuff lined up just
0:55 right. We're going to use SQLLite,
0:56 which is a local file based database built into python so there's nothing to run and
1:02 nothing to install. So here's what we're gonna do.
1:05 Make sure we've set it up once.
1:07 Make sure that we have a database file.
1:09 That's the connection string for SQLAlchemy specified.
1:13 We're going to make sure the path exists,
1:15 and we're gonna use path lib to say,
1:17 basically, if it doesn't exist,
1:19 create the folder structure that has been passed in, before we try to save a file
1:23 Their SQLLite, will create the file,
1:25 but it won't create the parent directory structure required to save that.
1:29 But then we've got our connection string.
1:31 We're specifying some connection settings here, like we're going to create this thing called the Engine
1:36 This is the thing that actually talks to the various database implementations with the connection
1:41 string, you want to see the messages are SQLexchange with the database you could set
1:47 echoed a True and we're going to say we don't care about which the red stuff
1:50 is running on and they're going to create this thing called Factory. Factory is what creates
1:55 a session or a unit of work and the design pattern nomenclature.
2:00 That's the thing that we're going to use each time we want to make some database
2:04 operations. We're gonna use this factory to create a session and then do all then do other
2:07 work and then commit or not commit that session.
2:11 Now one of the things we have to do for SQLAlchemy to work is we
2:14 have to make sure it's seen everything that derives from SQLAlchemy base.
2:20 So I'm going to come up with this little idea here of saying what we're going
2:24 to do is create a single file here called this.
2:29 And in this we'll just say from db import And let's just put the things we
2:34 need to put order and we're going to import user.
2:38 If we had another option, another class,
2:40 we would put it here as well.
2:42 Now, sometimes some tools will take this away,
2:45 especially PyCharm under certain settings.
2:47 So I'm going to tell it,
2:48 you know these, even though they look like they're not used this time,
2:51 this matters. What this effectively does is it loads this file and make sure that
2:56 this statement is executed before we do what's next in the session.
3:00 While okay, so just that's just necessary for to actually create the tables and then
3:05 over here, where it's going to go to SQLAlchemy base and say,
3:08 create all tables using this engine or this connection.
3:12 Then, whenever we want to talk to the database,
3:14 we'll just call either create session or will create one of these session context things if
3:18 we want to use it within a with block,
3:20 which I think is a little bit cleaner.
3:21 But either way, you could use this one or this one to talk to the database.