3. Django ORM数据库操作

操作系统: windows
IDE: Pycharm

后端开发基本都需要操作数据,包括数据的存储、查询、修改、删除。
通常,这些都是通过数据库来完成的。目前业界最广泛使用的数据库还是:关系型数据库。关系型数据库系统,常用的开源数据库有 MySQLpostgresql

Django框架也可以使用sqlite数据库,sqlite没有独立的数据库服务进程,数据操作被做成库直接供应用程序调用。 Django中可以直接使用,无须先搭建数据服务。

Django使用ORM(对象关系映射)来对数据库进行操作,如果要更改系统使用的数据库,例如从sqlite到mysql等其他数据库,只需修改一些配置就可以了。

创建数据库

项目中数据库的配置在 settings.py 中,里面有一个DATABASES代码块:

# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',	#BASE_DIR就是项目的根目录
    }
}

使用命令创建的项目时,数据库缺省就是使用 sqlite。 而且对于的数据库文件,缺省的文件名是 db.sqlite3 , 就在项目的根目录下面。

如果发现没有数据库文件,执行如下命令:

python manage.py migrate

就会在项目的根目录下面生成一个配置文件中指定的数据库文件 db.sqlite3
在这里插入图片描述

并且会在其中创建一些表,可以用SQLiteStudio查看。
在这里插入图片描述
生成的这些表,来自于Django的自带的app,app中的models.pymigrations文件夹下的内容均是和数据库相关的代码文件。

什么是ORM?

Django里面, 数据库表的操作,包括表的定义、表中数据的增删改查,都可以通过 Model 类型的对象进行的。数据库中表定义表记录之间的关系就像类的实例之间的关系,Django就让开发者通过类的实例的操作来实现对数据库表和记录的操作。

通常,在Django中定义一张数据库的表就是定义一个继承自 django.db.models.Model。定义该表中的字段(列), 就是定义该类里面的一些属性。类的方法就是对该表中数据的处理方法,包括 数据的增删改查。

这样,开发者对数据库的访问,从原来的使用底层的sql语句,变成面向对象的开发,通过一系列对象的类定义和方法调用就可以操作数据库。
这种通过对象操作数据库的方法 被称之为 ORM(object relational mapping)

使用ORM的优点:

  • 极大的简化了应用中的数据库开发,因为无需使用sql语句来操作数据库了, 提高了开发的效率
  • 不用再考虑不同的数据库访问的底层细节,基本做到了开发好代码后,如果要换数据库,几乎不需要改代码, 修改几个配置项就可以了

定义数据库表:

就是定义继承自models.Model的类。
创建一个common app,用来实现公共的功能。

python manage.py startapp common

数据库表的定义,一般是在app目录中的 models.py里面实现的。
打开 common/models.py,定义一个Costomer类:

from django.db import models

# Create your models here.

#存放数据库表对象

class Costomer(models.Model):
    #客户名称
    name = models.CharField(max_length=200) #对应数据库中的varchar

    #联系电话
    phonenumber = models.CharField(max_length=200)

    #地址
    address = models.CharField(max_length=200)

这个 Customer类继承自 django.db.models.Model, 就是用来定义数据库表的。

里面的 namephonenumberaddress 是该表的3个字段。

定义表中的字段就是定义一些静态属性,这些属性是 django.db.models 里面的各种 Field 对象,对应不同类型的字段。
比如这里的3个字段都是 CharField 对象,对应 varchar类型的数据库字段。后面的参数 max_length 指明了该 varchar字段的最大长度。Django有很多字段对象类型, 对应不同的类型的数据库字段。

Django 3.1官方文档

此时只是完成了表的定义,那如何让Django将定义实现呢?
setting.py中的INSTALLED_APPS增加一条:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

	#增加的是这条
    'common.apps.CommonConfig'
]

common.apps.CommonConfig告诉 Django , CommonConfigcommon/apps.py 文件中定义的一个应用配置的类。

from django.apps import AppConfig

class CommonConfig(AppConfig):
    name = 'common'

CommonConfigAppConfig的 子类, 就表示这个是应用的配置类
这里 name = 'common'name是用来定义应用的python模块路径的。这里就是说应用模块路径为 common
关于其他的配置参数,可以参考官方文档

现在Django知道了我们的 common 应用, 我们可以在项目根目录下执行命令

python manage.py makemigrations common

得到如下结果:

Migrations for 'common':
  common\migrations\0001_initial.py
    - Create model Customer

这个命令,告诉Django ,去看看common这个app里面的models.py ,现在已经修改了数据定义, 你现在去产生相应的更新脚本

执行一下,会发现在 common\migrations 目录下面出现了0001_initial.py, 这个脚本就是相应要进行的数据库操作代码。

然后执行如下命令:

python manage.py migrate

#这里是结果
Operations to perform:
  Apply all migrations: admin, auth, common, contenttypes, sessions
Running migrations:
  Applying common.0001_initial... OK

现在Django就真正去数据库创建表了。
可以看到commo_costomer表(前面是app名 后面是类名,用_连接,全部小写)已经被成功创建。

注: 定义表时,如果没有特意设置主键,会自动添加一个id作为表主键
在这里插入图片描述
要再添加属性的话,同样是在model.py中进行设置,但要注意加上缺省值,或者允许为空,例如在common表中加一个qq字段:

    #null允许没有值 blank允许是空字符串
    qq = models.CharField(max_length=20, null=True, blank=True) 

以后要更新表的话,就重复以上的操作:

  1. 在对应app目录下的models.py中修改属性
  2. python manage.py makemigrations XXX 生成对应脚本
  3. python manage.py migrate 执行脚本,使数据库同步该修改结果

在这里插入图片描述
可以看到字段添加成功

Django Admin 管理数据:

Django提供了一个管理员操作界面,可以方便的添加、删除、修改定义好的model表的数据。Djiango创建的数据库缺省就提供了一个auth_user表,我们可以直接拿来用:
在这里插入图片描述

首先,需要创建一个管理员账号:
: 创建管理员账号不能直接在数据库中进行,因为密码是加密的,在数据库中并非明文存储。

进入到项目的根目录,执行如下命令,依次输入管理员的登录名、email、密码:

python manage.py createsuperuser

效果如下:
在这里插入图片描述

:密码至少8个字符,我设置了12345678

然后我们需要修改app里面的管理员配置文件common/admin.py,注册我们定义的model类。这样Django才会知道,我们就可以在下面的网页上添加信息了

# Register your models here.

from django.contrib import admin
from .models import Customer

admin.site.register(Customer)

好了,现在就可以访问 127.0.0.1:8080/admin/,输入刚才注册的用户密码登录。
登录后可以看到如下界面。这里面是目前系统中可以修改的表。
在这里插入图片描述
在这里插入图片描述
点击我们定义的customer表,进行添加,并按save and add another按钮
可以看到已经成功添加到数据库了:

:通常不建议直接在数据库中进行添加,添加数据的页面通常也需要自己开发,并不会直接使用Django提供的这个
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值