Django数据库操作

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

目录

一、Django/ORM框架介绍及配置

1.1、ORM框架介绍

1.2、Django数据库配置

二、定义模型类数

2.1、定义模型类

2.2、迁移

2.3、插入数据

三、单表据库操作(增、删、改、查)

3.1、增

3.2、删

3.3、改

3.4查(重点)

四、两表联查

4.1、一对多、多对一

4.2、一对一

4.3、多对多

五、模型类序列化器

5.1、序列化器介绍

5.2、序列化器使用

5.3、数据的拼接

5.4、自定义序列化器实现添加修改

 5.5、模型类序列化器


一、Django/ORM框架介绍及配置

1.1、ORM框架介绍

ORM框架 O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。

django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。

使用django进行数据库开发的步骤如下:

  1. 配置数据库连接信息

  2. 在models.py中定义模型类、迁移、插入数据

  3. 通过类和对象完成数据增删改查操作

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验证如果成功就可以往里面添加数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值