As we discussed earlier in Chapter 1, Introduction to Django and Getting Started, the M in MTV stands for Model. A Django model is a description of the data in your database, represented as Python code. It's your data layout-the equivalent of your SQL CREATE TABLE
statements-except it's in Python instead of SQL, and it includes more than just database column definitions.
Django uses a model to execute SQL code behind the scenes and return convenient Python data structures representing the rows in your database tables. Django also uses models to represent higher-level concepts that SQL can't necessarily handle.
If you're familiar with databases, your immediate thought might be, "Isn't it redundant to define data models in Python instead of in SQL?" Django works the way it does for several reasons:
Introspection requires overhead and is imperfect. In order to provide convenient data-access APIs, Django needs to know the database layout somehow, and there are two ways...