Django操作数据库,一篇文章带你彻底了解

作为一个顶级网站后端框架,Django展示出了其特有的能力。我们知道,一个应用,无论是App还是网站,一个很重要的功能就是要与数据库进行交互。在Django这里,它给我们提供了便利。通常我们要操作数据库,都是用sql语句,来对数据库进行增删改查。这使得开发者不仅要学习高级语言,还要学习sql语句。

现在,我们使用Django作为后端开发框架,我们不需要通过sql语句来操作数据库,而是通过对象。这让开发容易了很多。Django框架能够为我们处理底层的与数据库交互的操作。

接下来,我们就开始吧!

数据库的选择:

Django适合多种常用的数据库,当然对于开发者来说,我们选择使用的是关系型数据库。常用的开源的数据库有 mysql 和 postgresql。

由于MySQL这些数据库安装有点麻烦,我们这里采用的是比较简单的本地数据库SQLite。在本地开发时选择这个,等到项目完成时,转移至服务器时,我们可以将数据库修改了MySQL等,修改时很容易,只需要修改一些配置。例如数据库的地址、用户名、密码等等信息。

所以,在此,我们选择SQLite。

SQLite下载地址,该数据库不需要进行配置,下载解压即可使用。

创建数据库:

在Django项目的setting.py文件中,找到DATABASES,这是对数据库的类型选用。我们使用的是SQLite。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

如果是其他类型的数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

在这里插入图片描述
要生成这个数据库(db.sqlite3),你可以执行下面这个命令。

python manage.py migrate

接着使用SQLiteStudio打开这个数据库。
在这里插入图片描述
打开之后,你会发现这里会有一些地动生成的表,这些表是Django框架的一些表,比如Django有一个自己的管理员界面,其中要存管理员信息,就有一个管理员信息表。
在这里插入图片描述
数据库已经创建好了,接下来就是要创建表了。创建表之前,你要了解如何去创建一个表,如何去操作一个表(增删改查)。

上面已经说了,在Django的基础上,我们不需要SQL语句,而是通过对象来完成操作。
Django 可以让开发者 通过 类 和 实例的操作 来对应 数据库 表 和记录的操作。

Django 里面, 数据库表的操作,包括 表的定义、表中数据的增删改查,都可以通过 Model 类型的对象进行的。

  • 定义一张数据库的表 就是定义一个继承自 django.db.models.Model 的类

  • 定义该表中的字段(列), 就是定义该类里面的一些属性

  • 类的方法就是对该表中数据的处理方法,包括 数据的增删改查

至此,我们就是摆脱了底层的sql语句,转为面向对象的类的定义和方法的结合操作数据库。
这种 通过 对象 操作数据库 的方法 被称之为 ORM (object relational mapping)

创建数据库表:

通常在一个系统中,在数据库这块,我们把一些公关数据表单独放到一个app模块中。
那么,我们就使用命令,创建一个app模块来创建数据库公共表。

python manage.py startapp common 

前面已经说过,Django是通过定义类来定义数据库表的。
所以,我们要定义数据库的表,无需执行sql语句,只需要在app目录下面 定义特殊的类就可以了。

数据库表的定义,一般是放在app目录中的 models.py里面的。
接着,我们写入一些创建表的代码:

from django.db import models
class Users(models.Model):      #定义用户类,用来创建用户信息的表
    #用户名称
    name = models.CharField(max_length=200)

    #用户电话
    phone = models.CharField(max_length=100)

    #用户住址
    addr = models.CharField(max_length=500)

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

CharField 对象,对应 varchar类型的数据库字段。后面的参数 max_length 指明了该 varchar字段的 最大长度。
当然除了CharField之外,Django还有许多其他类型,比如:BooleanField、DateField、DateTimeField等等。可查看官方文档

在上面的代码中,我们定义了表的几个字段,接着我们要创建该表。

要创建该表,你就要告诉Django,我们的 common 应用中 需要你关注(也就是让Django判断文件是否被修改), 因为其中包含了 数据库Model的定义。

打开项目中的配置文件settings.py文件,INSTALLED_APPS 配置项 加入如下内容:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'catalog.apps.CatalogConfig',
    'common.apps.CommonConfig',    #加入此行代码
]

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

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

python manage.py makemigrations common

common是你创建的公共的数据库的app名称。如果有多个,可以直接在common后面,空格添加。
执行上面命令之后,如下所示。
在这里插入图片描述
接着,你去common文件下打开migrations会发现多了一个文件。该文件正是你刚所创建的表。
在这里插入图片描述
0001_initial.py文件内容。

# Generated by Django 3.0.3 on 2020-05-19 11:51

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Users',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=200)),
                ('phone', models.CharField(max_length=100)),
                ('addr', models.CharField(max_length=500)),
            ],
        ),
    ]

然后我们要创建该表到数据库中了,执行命令:

python manage.py migrate

在这里插入图片描述
打开数据库,就出现了你刚刚所创建的表:
在这里插入图片描述
如果你在原来那个表的基础上,增加或者减少了字段,修改之后,继续执行上面两个命令:

1.  python manage.py makemigrations common
2. 	python manage.py migrate

Django框架管理员入口:

Django提供了一个管理员操作界面可以方便的 添加、修改、删除你定义的 model 表数据。

首先,我们需要创建 一个超级管理员账号。

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

python manage.py createsuperuser

在这里插入图片描述
注意密码至少8个字符。
在这里插入图片描述
创建成功之后,我们在数据库中管理员表中会看到多了一条数据,这里密码是经过加密的。所以说,Django框架自带有数据库安全设置。

然后我们需要修改应用里面的 管理员 配置文件 common/admin.py,注册我们定义的model类。这样Django才会知道,其实这块代码是在我们登录管理员界面之后,会出现我们刚创建的Users表:

from django.contrib import admin
from .models import Users
# Register your models here.
admin.site.register(Users)

然后启动服务,打开管理员界面:
http://127.0.0.1:8000/admin
在这里插入图片描述
在这里插入图片描述
我们可以点击userss页面,进行添加数据。保存之后,数据将存到数据库中。
在这里插入图片描述
不过现在看来,一切操作都有点low,因为管理端界面不是我们自己写的,而是Django框架自带的管理员界面。所以,通常管理员界面需要我们自己再进行开发。

从数据库中获取数据:

获取数据库信息也不是件很难的事情,我们只需要通过简单的对象和方法就可以获取到数据。

首先,我们要有一个路径,去请求获取数据库某个表数据信息。就拿user/ifo路径为例:
如果你不懂Django路由,可参考: Django路由,一篇文章带你彻底了解
当我们访问:http://127.0.0.1:8000/user/ifo/时,就会去获取数据库该表中全部信息。
在这里插入图片描述
具体代码该如何写呢?往下看:

我们在user模块下的views.py文件中,写获取数据库信息的代码:

from django.shortcuts import render
from common.models import Users   #导入操作数据库表的类
from django.http import HttpResponse
# Create your views here.
def userIfo(request):        #当访问user/ifo时执行该函数,发送已给请求
    ifo = Users.objects.values()   #通过对象操作数据库,获取数据库信息
    userifo = ''
    for IFO in ifo:    #将数据循环出来
        for name,value in IFO.items():
            userifo += f'{name}:{value}|'
        userifo += '<br>'
    return HttpResponse(userifo)  #返回请求的信息

上面这种方式时获取一个数据库表中的所有数据,那往往我们有时获取部分数据,比如通过某个条件进行筛选。

接下来,我们在通过筛选电话进行获取数据库信息。
接着,我们访问的时候,链接上应该加上参数,这个通常是在前端页面的表单中输入一个值,提交的时候该值作为参数,当然可以有多个参数。

访问链接:http://127.0.0.1:8000/user/ifo/?phone=18569547823
在这里插入图片描述
我们只需要在views.py文件中对数据库的查询增加查询条件:
判断请求参数中是否有参数,如果有就就行筛选。

from django.shortcuts import render
from common.models import Users
from django.http import HttpResponse
# Create your views here.
def userIfo(request):
    ifo = Users.objects.values()
    cs = request.GET.get('phone',None)  #判断请求时是否有参数phone,如果有cs就为phone,就执行if语句,如果没有cs就等于None,就不执行if语句
    if cs:
        ifo = ifo.filter(phone=cs)  #filter方法是进行筛选
    userifo = ''
    for IFO in ifo:
        for name,value in IFO.items():
            userifo += f'{name}:{value}|'
        userifo += '<br>'
    return HttpResponse(userifo)

filter方法是一个过滤条件。
有了这个过滤条件,Django 会在底层执行数据库查询的SQL语句 加上相应的 where 从句,进行过滤查询。

下面一篇文章,我们将继续深入Django学习!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聂大哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值