目录
一、Django/ORM框架介绍及配置
1.1、ORM框架介绍
ORM框架 O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。
django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
使用django进行数据库开发的步骤如下:
-
配置数据库连接信息
-
在models.py中定义模型类、迁移、插入数据
-
通过类和对象完成数据增删改查操作
1.2、Django数据库配置
项目创建
# 创建项目
django-admin startproject 项目名
# 创建应用app(两条都可实现)
django-admin startapp 应用名
python manage.py startapp 应用名
数据库连接(django 默认连接 aqlite3 数据库,这里使用 mysql 数据库)
# 使用mysql数据库需要在主目录的同名子目录下的 __init__.py 文件下配置
import pymysql
pymysql.install_as_MySQLdb()

# 在主目录的同名子目录下的 settings.py 文件中修改 django 默认数据库
# django 默认连接 sqlite3 数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
#更改为连接 mysql 数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指明连接数据库的引擎
'NAME': 'django05', # 库名, django 连接的 mysql 数据库库名
'HOST': 'localhost', # 数据库的ip地址,
'PORT': 3306, # 数据库的端口号
'USER': 'root', # 用户名
'PASSWORD': 'admin123' # 密码
}
}
创建数据库
# 在终端登录 mysql
mysql -u root -p
# 输入密码
******
# 创建数据库
create database 库名 charset utf8;
若需跨域配置
# 在主目录的同名子目录下的 settings.py 文件中配置
INSTALLED_APPS = [
"corsheaders"
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"corsheaders.middleware.CorsMiddleware"
]
#允许所有源访问
CORS_ORIGIN_ALLOW_ALL =True
路由配置
#主路由里添加子路由(需在子应用中创建python file文件的子路由)
from django.urls import path,include
# from app名 import 子路由
urlpatterns = [
path('admin/', admin.site.urls),
# path("路由/",include(“子路由”))
# 也可以不导包,直接添加
path("路由/",include("app名.子路由"))
]
# 子路由中配置
from django.urls import path
# 导入视图
from . import views
urlpatterns = [
path("路由/",views.方法名.as_view())
]
二、定义模型类数
2.1、定义模型类
模型类需定义在子应用的 models.py 中
常用字段类型

常用字段字段属性

模型类创建案例
不同的数据库中 对应的 sql语句不一样, django为了简单, 统一采用 模型类,模型类 定义在 app/models.py 文件中
from django.db import models
class Books(models.Model):
# 模型类中不需要指定 id字段,会自动生成
name = models.CharField(max_length=20,verbose_name="书名")
# 数据库的可变字符串类型 varchar(20)
# max_length : 指定可变字符串的最大长度
price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='价格')
# 数据库的 金钱有关的字段 decimal(7,2)
# max_digits: 指定数字的最大位数,包括小数
# decimal_places: 指定小数的 位数
hire_date = models.DateField(verbose_name='出版日期')
# 数据库的 日期字段 date
# auto_now_add: 在对象添加时,自动设置为 当前时间, 后期不再改变
# auto_now: 在对象每次更新时,时间都会设置为更新时的时间
# 避免矛盾,`auto_now`,`auto_now_add`,`default`不能同时出现,一个字段属性只能有其中一条设置,
# 当设置了`auto_now`,或`auto_now_add`时,也会让该字段默认具有`blank=True`(字段可以为空)属性
author = models.CharField(max_length=20, verbose_name='作者')
num = models.IntegerField(verbose_name='库存', default=0)
publish = models.CharField(max_length=20, verbose_name='出版社')
type = models.CharField(max_length=10,verbose_name="类别")
sales_volume = models.IntegerField(verbose_name='销量', default=0)
def __str__(self):
# 修改对象的描述信息, 此时查看图书对象,已经不是默认的对象地址信息, 而是图书对象的书名
return self.name
# 元选项一定属于模型类中的一部分,不能单独使用
class Meta:
db_table = 'tb_book' # 指定表名, 默认为 app名_模型类名
verbose_name = '图书' # amdin中显示的表的名字,为单数形式
verbose_name_plural = verbose_name # 复数形式
2.2、迁移
模型类创建好后,将模型类迁移到数据库
在终端执行迁移命令,会在对应app下生成一个迁移文件migrations 用来记录数据库迁移的信息
如果数据库出错,需删库重创时,必须把migrations 文件删掉再重新创建,否则报错
# 生成迁移文件
python manage.py makemigrations
# 执行迁移文件同步数据到数据库
python manage.py migrate


迁移成功生成表格

修改字段、迁移
# 若数据库中未添加数据,修改字段属性,重新执行迁移命令即可
# 若有数据,添加新的字段,新字段的属性为:可以为空 或 有默认值,则可重新执行迁移命令
# 若有数据,想添加一个非空、没有默认值的字段则报:
You are trying to add a non-nullable field 'type' to books without a default; we can't do that (the database needs som
ething to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
翻译:
请选择修复方案:
1)现在提供一个一次性的默认值(将在所有现有行上设置此列的空值)
2)退出,让我在models.py中添加一个默认值
# 选 1 后,需再输入一个默认值,(测试时,输入中文报错,如数据不多,建议再输入默认值: 1 后,在数据库中修改为需要数据),继续执行迁移命令5
# 选 2 ,给字段添加default 属性,即可重新迁移
反向迁移
若有一个完整的数据库和数据,想要生成模型类以使用,则可以使用反向迁移,
反向迁移会将所有的表都生成模型类存放在一个文件中,
(只进行过简单尝试了解,并未深入写下去,感受:多个模型类在一起有些杂乱,有些字段属性可能用不到,但确实比自己重新写入模型类迁移插入数据快的多,并且字段对应不会出错,表关系清晰,可以把需要的模型类拉入自己的app下修修改改使用)
django的orm模型已经内置了反向迁移命令
python manage.py inspectdb > models.py # >后面是生成的文件路径和名称
python manage.py inspectdb > ./APP名称/models.py # 生成到指定的app下
2.3、插入数据
常用的插入数据方法:一、创建超级用户 二、python连接数据库直接添加
一、创建超级用户
在应用app下的admin.py 下注册
from django.contrib import admin
from .models import *
admin.site.register(模型类名)
python manage.py createsuperuser 创建超级用户
邮箱不需要添,账号密码依次设置
初次访问连接:127.0.0.1/admin

访问页面、并操作


二、python 链接数据库,直接添加
从右侧的database >>>> 点击"+" >>>> Data Source >>>>MYSQL
填写里面的数据,Test Connection验证如果成功就可以往里面添加数据

本文详细介绍了Django的ORM框架,包括数据库配置、模型类定义、数据迁移、单表及两表联查的操作,以及模型类序列化器的使用。重点讲解了增删改查操作和不同关系的表间查询,还提到了Django序列化组件在数据转换和验证中的作用。
1388

被折叠的 条评论
为什么被折叠?



