Building Data-Driven Web Apps with Pyramid and SQLAlchemy Transcripts
Chapter: Modeling data with SQLAlchemy classes
Lecture: Creating tables
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
With our connection and engine set up it's time to create the tables. One way the wrong way would be to go to the database
0:09
and actually start using the database design and modeling tools to just go and model the stuff. Because we've already got that right here.
0:18
In fact, we need those to match exactly. So it's better if we just let SQLAlchemy do it. So, it's actually super easy here.
0:26
Let's go down after we've done this bit and if we can import our SQLAlchemyBase which we can, it has metadata right there. And on the metadata
0:39
there's no help from PyCharm here but it does exist when we say, create_all and pass the engine. So, if the database doesn't exist
0:47
whatever connection string info we gave it here it will create it and then it's going to create the tables and the primary keys and the relationships
0:57
and all that stuff based on all of the various types that derive from this. There's one really big caveat that's easy to miss here.
1:06
By the time line 27 is run every single class that derives from it must have already been imported, so SQLAlchemy has seen it.
1:17
If you import those afterwards, too late those tables are not getting created. So I'm pretty sure right now, the way this is working
1:25
is it's going to be failing So we need to do something kind of like this. We need to go over here and say from pypi.data.packages
1:36
import package, release and user, and whatever. Alright, so we got to do this for all of 'em. So we got to do it like this.
1:46
Now that, expanding out of all the ones you need turns out to be super error prone so let's add one little trick here. And add one more file.
1:55
Now let's call this all_models kay, and over here I'll say, well exactly that. So we're just going to list everyone here from packages, import package
2:10
and we define release and we're going to import that and we define languages, we're going to import that and let's tell PyCharm
2:15
"Hold on, no this, I know it looks like this does nothing," "but for the moment, we need to have this here."
2:21
"It actually has an effect that you don't realize." "So thanks for the help, but not this time."
2:25
And then over here, we can just make this a little simpler. We can just import it like that, and we'll put that little, you know
2:36
"PyCharm, please ignore this." So that way, we can just model it right here and it doesn't matter where where we do this import
2:43
but that's a really not obvious thing but you have to basically, before you run this import every single model or it's not going to work.
2:50
However, with this in place and if we call this function, it should work. So let's go to our __init__ down here we're going to include the net routing
3:00
let's have a init DB config. And we'll come down here and we'll just put that at the end. And this should be pretty simple so we'll say, "DB session,"
3:14
import that and we'll just say, "global_init," and we'll have to give it a file. What file do we give it? Well, let's make a little folder
3:22
'cause this is SQLite, we'll just make a little folder called DB and we'll put it in here, okay? If we were using, say PostCraft, like I said
3:30
that we'd just give it a regular connection string like here's the server. But we're going to need this, so how do we do that? Let's say, "DB folder."
3:40
We'll use the os module, yeah? So come over here and say, "path.absolutepath" "of some stuff, we're going to say, os.path.join"
3:50
And what are we going to put in it? We'll say, "os.path.dirname of wherever we are." So, we're going to be in the PyPI folder just __init__.
4:02
So we want to be in the PyPI directory and then down here, we're going to say "The next thing we want is DB."
4:09
And then the next thing we want is pypi.bin or let's call SQLite, how's that? Want that right there. And we'll just pass DB let's call that file.
4:23
'Cause it's not just the folder, but it's the file. Great, now if we run it we're not using the config for now so let's put an underscore
4:32
probably need it later if we say "Store different DB settings in production" "and development" here. But now we don't need it.
4:40
Alright, so when we run this we should see it print out a path that's located here and actually create the database files.
4:48
You'll notice there's no little expando chevron thing here. There's no files in there. Let's run it. Well it didn't crash, that's a good start.
4:58
It's creating this, you can see way down there. Now, if I go over here say "Synchronize." Oh look, look look look what we got! How cool is that?
5:11
Okay, so, it's really nice that this is here how do we know what's in it? Did it actually create that packages table or did it not?
5:18
Well, in PyCharm that's easy to answer. So we come over here and we can drag and drop this and it'll open up if, if if if it's a big if.
5:28
So you got to go here once on your machine and go "datasource SQLite serial" and then notice here it has driver.
5:37
It looks like it can update the driver files but sometimes it'll say you have to download the driver files 'cause there's no file.
5:43
So we can download 'em again just to show you what that looks like. Alright, apparently that's updated. That's cool.
5:52
We can come down here and expand this out in the schema and main and look! There's our packages. Primary key with an index ID. Right, there's that.
6:01
We got a create date, which is a datetime. Our summary which is varchar. Our license which is varchar. There's a lot of varchar happenin' around here.
6:08
But there is our database with our one table and notice it's named packages plural not upper case P package singular. You go over here, say "Select,"
6:19
"star from Packages where author email" look at that, beautiful. Beautiful beautiful. If for some reason you don't have the pro version of PyCharm
6:29
you can use this app DB Browser for SQLite. Come over here and find the file. And you get the same thing, right? So here you go, it's not.
6:45
I dunno, maybe it's nicer or maybe it's not quite as nice. I haven't used it that much but this is also another thing you can get for free.
6:51
Just google DB Browser for SQLite. Either way, our database is all up and running. Now this is only the beginning of course
6:59
but we've created our database and we've got a lot of stuff in place. Really all we have left to do is just to expand out all the other various tables
7:08
we're going to work with.