Django教程:ORM模型介绍及使用

2023-08-1417:03:18后端程序开发Comments1,595 views字数 4552阅读模式

Django教程:ORM模型介绍及使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

1.引言

Django模型作为ORM对象关系映射的一种形式,负责将实际的数据库映射为Django应用程序的对象,并提供简单而自然的API,使程序员能够轻松地从数据库中查询、插入、更新和删除数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

上篇文章中,我们简单介绍了Django的入门知识[1],本文中我们将以创建一个简单的应用——bbs应用来讲述Python的模型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

2.数据库配置

在开始模型的介绍之前,我们最好先配置好数据库,在第一篇教程生成的django应用中, 找到项目文件夹下的poycode/setting.py文件。首先映入眼帘的就是注释:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

Django settings for poycode project.

Generated by 'django-admin startproject' using Django 4.2.4.

这个文件包含了许多配置,包含授权、语言、时区等等,定位到DATABASES配置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

可以看到,默认配置的数据库就是python自带的sqlite3数据库,如果只想体验一下Django,无需任何操作就可以使用它。但是,当我们打算借助Django研发一个新的项目时,我们必定会选择扩展性更好,性能更强的数据库。避免中途切换数据库这个令人头疼的问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

如果想使用其他数据库,则需要安装合适的 database bindings[2] ,然后改变设置文件中 DATABASES[3] 'default' 项目中的一些键值:比如 我们需要增加用户名、密码、端口之类的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

ENGINE可选项包含主流的数据库:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

-'django.db.backends.sqlite3'文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

-'django.db.backends.postgresql'文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

-'django.db.backends.mysql'文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

-'django.db.backends.oracle'文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

除了官方支持的数据库外,还有第三方提供的后端,允许你在 Django 中使用其他数据库,这个需要用的话,可以自行查阅。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

接下来我们修改数据库为MySQL,并将配置信息改为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        "NAME": "poycode_bbs",
        "USER": "root",
        "PASSWORD": "12345678",
        "HOST": "192.168.8.142",
        "PORT": "3306",
    }
}

2.新建应用

在Django中项目和应用有什么区别?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

应用是一个专门做某件事的应用程序——比如积分系统,支付系统,或者日志系统,亦或者一些小型的类似投票、签到之类的程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

而项目则是一个网站使用的配置和应用的集合。一个项目可以包含很多个应用,应用可以被很多个项目使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

在上一篇文章中,我们已经学会使用命令:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

python manage.py startapp bbs

我们新建一个bbs应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

3.新建模型

一个模型就是单个定义你的数据的信息源。模型中包含了不可缺少的数据区域和存储数据的行为。Django 遵循 DRY 原则[4](Do Not Repeat Yourself)。目的就是定义你的数据模型要在同一位置上,而且自动从该位置推导一些事情。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

来介绍一下迁移 - 举个例子,不像 Ruby On Rails,Django 的迁移代码是由你的模型文件自动生成的,它本质上是个历史记录,Django 可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

例如我们新建一个模型,Post代表文章,UserPost代表用户浏览文章的一些记录文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date  = models.DateTimeField(auto_now_add=True)

class UserPost(models.Model):
    user_id = models.BigIntegerField(name='用户ID')
    read_times = models.BigIntegerField(name='个人点击次数', default=1)
    is_like = models.BooleanField(name = '喜欢', default=False)
    is_start = models.BooleanField(name= '收藏', default=False)
    is_public = models.BooleanField(name='公开', default=True)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)

上面的代码用于创建模型,但其实这给了 Django 很多信息,Django 可以通过我们编写的模型代码为这个应用创建数据库 schema(生成 CREATE TABLE 语句),并创建可以与 Post 和 UserPost 对象进行交互的 Python 数据库 API。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

OK,上述步骤完成之后,我们还需要做什么?要知道,为什么说,应用是一个专门做某件事的应用程序。Django中应用是可插拔式的,这也是Django的设计哲学之一,你可以在多个项目中使用同一个应用。除此之外,你还可以发布自己的应用,因为它们并不会被绑定到当前安装的 Django 上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

为了使得我们的工程中包含bbs这个应用,我们需要在setting.py配置文件中找到INSTALLED_APPS ,点式路径就是下图中的类。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

Django教程:ORM模型介绍及使用
django-app
INSTALLED_APPS = [
    'bbs.apps.BbsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

现在我们项目下已经包含了bbs应用了,接下来运行如下命令文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

python manage.py makemigrations bbs

通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 _迁移_。同时会在bbs/migrations文件夹下生成迁移文件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

注意!此时并没有对数据库进行操作!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

Django教程:ORM模型介绍及使用
file

Django 有一个自动执行数据库迁移并同步管理你的数据库结构的命令 - 这个命令是 migrate[5],我们马上就会接触它 - 但是首先,让我们看看迁移命令会执行哪些 SQL 语句。sqlmigrate[6] 命令接收一个迁移的名称,然后返回对应的 SQL:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

python manage.py sqlmigrate bbs 0001
  • • 这个 sqlmigrate[7] 命令并没有真正在你的数据库中的执行迁移 - 相反,它只是把命令输出到屏幕上,让你看看 Django 认为需要执行哪些 SQL 语句。这在你想看看 Django 到底准备做什么,或者当你是数据库管理员,需要写脚本来批量处理数据库时会很有用。

如果你感兴趣,你也可以试试运行 python manage.py check[8] 这个命令帮助你检查项目中的问题,并且在检查过程中不会对数据库进行任何操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

4. 迁移模型

在Django中我们可以使用如下命令来实施真正的迁移行为,这将对数据库进行变更!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

python manage.py migrate
Django教程:ORM模型介绍及使用
django-migrate

此时打开数据库,可以看到Django为我们生成了数据库表。Django模型的每一次变化都要进行 makemigration, 保存好迁移记录,以便我们在将应用直接移植到其他项目时,可以直接运行 migrate 快速建立并运行项目。这也是python可插拔设计哲学的体现之一。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

5. 数据操作

5.1 使用生成的api对数据进行操作

进入交互式 Python 命令行,通过以下命令打开,我们体验一下 Django 创建的各种 API。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

python manage.py shell
from bbs.models import Post
>>> from django.utils import timezone
>>> p = Post(title='第一批测试文章', content='文章内容11111测试', pub_date = timezone.now())
>>> p.save()
>>> p.id
1
>>> p.content
'文章内容11111测试'
>>> p.title='更换title'
>>> p.save()

5.2 django自带的后端进行操作

django在创建时,默认为我们安装了一个后台管理应用,可以使用下面的命令来创建一个账户,并按提示输入用户名密码后,即可使用该账户进行访问。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

python manage.py createsuperuser
##### 创建完账户后,使用web方式运行django
python manage.py runserver

访问地址:http://127.0.0.1:8000/admin, 并输入上面创建好的账户和密码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

Django教程:ORM模型介绍及使用
django-admin

进入后,发现Django自带的对用户和组的管理。它们是由 django.contrib.auth 提供的,这是 Django 开发的认证框架。问题是,我们的bbs应用在哪?我们需要在bbs/admin.py中注册我们的模型,告诉django需要对该模型生成后台接口!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

from django.contrib import admin

# Register your models here.
from .models import Post

admin.site.register(Post)

修改完成,刷新页面后,就可以对Post对象进行操作了!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

Django教程:ORM模型介绍及使用
django-admin-app

6.总结

本文简单介绍了Django模型,在后面的文章中,我们会继续深入探索Django模型的使用,重点主要体现在查询上。总而言之,通过定义模型,我们可以轻松地管理和操作数据库中的数据。其易用性和扩展性,可以让程序员轻松构建高质量和可扩展的Web应用程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/53699.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/53699.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定