一、介绍
模型,就是python中的类对应数据库中的表
1.1、ORM
ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写
ORM 把数据库映射成对象
1.2、示例
1.2.1、模型
python
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
1.2.2、数据库表
python
CREATE TABLE myapp_person (
"id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
说明
- 模型类必须继承models.Model
- 每个属性对应数据库表中的一个字段
- 表名自动使用 应用_类名 的小写(如:polls_question),可以覆盖重写
- 如果模型类中没有指定 primary_key ,那么会自动创建一个 id 字段,自增,主键
二、MySQL数据库迁移
当编写了模型之后,需要将模型应用到数据库中,具体步骤如下:
-
创建项目model_study,及子应用model_app
python#创建项目 $ django-admin startproject model_study #进入项目目录创建子应用 $ python manage.py startapp model_app
-
配置应用,将模型对应的应用程序添加到项目的settings中:
pythonINSTALLED_APPS = [ 'model_app' ]
-
在settings.py中配置正确的数据库连接:
python# mysql DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'model_study', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': 3306, } }
注意
需要安装对应数据库的驱动
pip install mysqlclient==2.1.1
pip install pymysql
python# __init__.py import pymysql pymysql.install_as_MySQLdb()
- 需要在mysql数据库中创建数据库model_study
2.1、创建迁移
在项目根目录的cmd中运行:
python
$ python manage.py makemigrations model_app
备注
- model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备迁移
- 指定该命令后,在对应的子应用下的 migrations 中会生成一个对应的迁移文件
2.2、正式迁移
在根目录的cmd中运行:
python
$ python manage.py migrate
备注
没有添加子应用名,那么就会把django项目中所有的应用都迁移到数据库中
三、sqlite3数据库迁移
当编写了模型之后,需要将模型应用到数据库中,具体步骤如下:
-
创建项目model_study,及子应用model_app
python#创建项目 $ django-admin startproject model_study #进入项目目录创建子应用 $ python manage.py startapp model_app
-
配置应用,将模型对应的应用程序添加到项目的settings中:
pythonINSTALLED_APPS = [ 'model_app' ]
-
在settings.py中配置正确的数据库连接:
python# sqlite3 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
注意
- 需要安装对应数据库的驱动
- 需要在mysql数据库中创建数据库model_study
3.1、创建迁移
在项目根目录的cmd中运行:
python$ python manage.py makemigrations model_app
备注
- model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备迁移
- 指定该命令后,在对应的子应用下的 migrations 中会生成一个对应的迁移文件
3.2、正式迁移
在根目录的cmd中运行:
python$ python manage.py migrate
备注
没有添加子应用名,那么就会把django项目中所有的应用都迁移到数据库中
四、更新数据库表结构
不管是新增模型,还是修改已有模型后,只需要执行行命令即可:
4.1、创建迁移
在项目根目录的cmd中运行:
python$ python manage.py makemigrations model_app
备注
- model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备迁移
- 指定该命令后,在对应的子应用下的 migrations 中会生成一个对应的迁移文件
4.2、正式迁移
在根目录的cmd中运行:
python$ python manage.py migrate
备注
没有添加子应用名,那么就会把django项目中所有的应用都迁移到数据库中
4.3、设置表名
在模型中建立内部类Meta设置db_table即可
python# Create your models here. class Person(models.Model): first_name = models.CharField(max_length=10) lname = models.CharField(max_length=30) age = models.CharField(max_length=30) class Meta: db_table = 't_person'