Django 基础教程

Django 查询

Django 展示数据

Django Admin

Django 模板

Django 表单组件

Django 高级

Django FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/django-model.html

django 数据库映射模型 model 使用详解


在 Django 中,ORM(对象关系映射)是一个关键概念,它允许你通过使用 Python 类来定义数据库模型,而不需要直接编写 SQL 查询语句。Django 的 ORM 提供了一种将 Python 对象与数据库表之间进行映射的方式,使得数据库操作变得更加简单和直观。

数据库的选定

Django 支持多种数据库后端,包括 MySQL、PostgreSQL、SQLite 等。你可以在项目的配置文件(settings.py)中指定所需的数据库类型和连接信息。

通常情况下,只需要修改以下设置:

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',  # 选择数据库引擎
        'NAME': BASE_DIR / 'db.sqlite3',        # 数据库文件路径(这里使用SQLite作为示例)
    }
}

若 mysql 配置如下:

DATABASES = { 
    'default': 
    { 
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': 'mysite', # 数据库名称
        'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 
        'PORT': 3306, # 端口 
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '123456', # 数据库密码
    }  
}

mysql 使用需要安装三方客户端库,如下:

pip install pymysql

Django 也深度支持 PostgreSQL,配置示例如下:

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # 数据库引擎
        'NAME': 'mypostgresql',  # 数据库名,Django 不会帮你创建,需要自己进入数据库创建。
        'USER': 'postgres',  # 设置的数据库用户名
        'PASSWORD': '123456',  # 设置的密码
        'HOST': '127.0.0.1',  # 本地主机或数据库服务器的 ip,不设置默认本地,即 localhost
        # 'PORT': '5432',  # 数据库使用的端口,不设置默认 5432
    }
}

PostgreSQL python client 库需要安装类似如下三方库:

pip install psycopg==3.1.9

请注意,对于 SQLite 来说,不需要额外安装 Python 客户端,因为 SQLite 是一个嵌入式数据库,它是 Django 的默认数据库后端,并且不需要单独的服务器或客户端。

对于 MySQL 和 PostgreSQL,你需要根据你的项目需要选择相应的 Python 客户端并安装它们。一般情况下,当你在 settings.py 中选择数据库后端时(通过 'ENGINE' 字段),Django 会自动根据所选后端加载相应的 Python 客户端库。

模型定义及模型类

在 Django 中,每个数据库表都由一个 Python 类来表示,该类继承自 django.db.models.Model。这个类的属性代表数据库表的字段,而类的方法则用于定义表之间的关系或自定义查询逻辑。

假设我们要创建一个简单的博客应用,包含两个模型: Author (作者)和 Post (文章)。其中,Post 模型将包含一个外键字段,与 Author 模型建立关系。代码示例如下:

# models.py

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

在上面的代码中,我们定义了两个模型类: AuthorPost。它们分别对应数据库中的两张表,每个类的属性定义了表的字段。

表名的定义

Django 默认会将模型类的名称作为数据库表名,但是你也可以通过在模型类中定义 Meta 类来指定自定义的表名。例如,如果我们想将 Author 模型映射到数据库中的 authors 表,代码示例如下:

# models.py

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'authors'

字段的定义

上述示例中,我们使用了几种常见的字段类型:

  • CharField :用于定义字符型字段,参数 max_length 指定字段的最大长度。
  • EmailField :用于定义邮箱字段,会验证输入是否为合法的邮箱地址。
  • TextField :用于定义文本字段,可以存储较长的文本内容。
  • DateTimeField :用于存储日期和时间信息。

Django 提供了多种其他字段类型,如整数、浮点数、布尔值、图片等。你可以根据具体需求选择合适的字段类型。

元数据(Meta)

在模型类中,Meta 类允许你定义一些额外的元数据,用于配置模型的行为。例如,我们可以通过 ordering 属性指定查询结果的默认排序方式:

# models.py

class Post(models.Model):
    # ...

    class Meta:
        ordering = ['-pub_date']  # 按照 pub_date 字段降序排列

在上述示例中,我们指定了 Post 模型的默认排序方式为按照 pub_date 字段的降序排列。

综述

Django 的 ORM 提供了一种便捷的方式来定义数据库模型和执行数据库操作。通过简单的 Python 类和字段定义,你可以轻松地与数据库交互,而无需直接编写 SQL 语句。以上代码示例展示了数据库的选定与配置、模型的定义、表名的指定、字段的使用以及元数据的配置,希望对你理解 Django 中的 ORM 有所帮助。

Java Map(映射) 是用来存放键/值对的接口。如果提供了键,就能够快速查找相应的存值。Java 类库为映射提供了两个通用的实现:Has ...
有关在Windows环境中使用Django、IIS(InternetInformationServices)和Python进行数据库开发的详 ...
ModelAdmin是Django框架中用于管理和配置Django模型在后台管理界面中显示和编辑的类。注册方式在Django中,你可以通过多 ...
在Django中,搜索数据库的所有方法主要涉及模型管理器(ModelManager)和查询集(QuerySet)。查询集的exclude() ...
Transformer模型架构是Google在2017年6月发表在arxiv上的一篇论文《AttentionIsAllYouNeed》中提到 ...