Django 模型

本文详细介绍如何在Django项目中集成MySQL数据库,包括环境搭建、数据库配置、模型定义及数据库的基本CRUD操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django 模型

环境

操作系统:Windows 10 64-bit
python版本:python 3.6
数据库:MySQL ( mysql-5.7.23-winx64 )

MySQL下载安装

下载地址: https://www.mysql.com/downloads/ ,安装略
如果想要可视化建库建表,可以下载 MySQL Workbench
启动/关闭 MySQL 服务:

net start/stop mysql

python的mysql模块安装

对于python 2:

pip install mysqlclient

对于python 3:

pip install PyMySQL

python 3 中,需要在settings.py同级目录的__init__.py文件中加入下面的代码:

import pymysql
pymysql.install_as_MySQLdb()

因为 Django 在连接 MySQL 数据库时默认使用的是 MySQLdb 驱动, 然而它并不支持 Python3,需要配置为 pymysql。

数据库配置

在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者 mysql.connector.django
        'NAME': 'test',    # 数据库名
        'USER': 'root',    # 数据库用户名
        'PASSWORD': 'test123',  # 数据库用户密码
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

数据库名和用户信息与 MySQL 中对应数据库和用户的设置相同。

定义模型

Django规定,如果要使用模型,必须要创建一个app,在项目根目录下:

django-admin startapp TestModel     #此命令创建一个TestModel的app

修改 TestModel/models.py 文件,添加模型:

# models.py
# 类名即为数据库表名,且继承了models.Model
# 类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime)
# max_length 参数限定长度

from django.db import models

class Test(models.Model):
    name = models.CharField(max_length=20)

在 settings.py 中修改 INSTALLED_APPS:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel',    # 添加
]

在命令行中运行:

$ python manage.py migrate   # 创建表结构
$ python manage.py makemigrations TestModel  # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel   # 创建表结构

至此,数据库表已建好
表名组成结构为:应用名_类名(如:TestModel_test),Django会自动添加一个id作为主键。

PS:如果数据库表已建立,Django可以根据现有数据库建立model:

django-admin startapp app 
python manage.py inspectdb > app/models.py

数据库迁移的两大命令:

python manage.py makemigrations
python manage.py migrate

前者是将model层转为迁移文件migrations(存在于app/migrations目录下),后者将新版本的迁移文件执行,更新数据库。这两种命令调用默认为全局,即对所有最新更改的model或迁移文件进行操作。如果想对部分app进行操作,就要在其后追加app name:

python manage.py makemigrations app_name
python manage.py migrate app_name

数据库操作

  • 添加数据
# -*- coding: utf-8 -*-
# 此为 testdb.py, 在 settings.py 所在目录下新建
from django.http import HttpResponse
from TestModel.models import Test
# 先创建对象,然后再执行 save 函数,相当于SQL中的INSERT
def testdb(request):
    test1 = Test(name='Karmen')
    test1.save()
    return HttpResponse("<p>数据添加成功!</p>")
  • 查询数据
def testdb2(request):
    response = ""
    response1 = ""

    # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
    list = Test.objects.all()

    # filter相当于SQL中的WHERE,可设置条件过滤结果
    response2 = Test.objects.filter(id=1) 

    # 获取单个对象
    response3 = Test.objects.get(id=1) 

    # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
    Test.objects.order_by('name')[0:2]

    #数据排序
    Test.objects.order_by("id")

    # 上面的方法可以连接使用
    Test.objects.filter(name="Karmen").order_by("id")

    # 输出所有数据
    for var in list:
        response1 += var.name + " "
    response = response1
    return HttpResponse("<p>" + response + "</p>")
  • 修改数据
def testdb3(request):
    # 修改记录为id=1的name字段,再save,相当于SQL中的UPDATE
    test1 = Test.objects.get(id=1)
    test1.name = 'Google'
    test1.save()

    # 另外一种方式
    #Test.objects.filter(id=1).update(name='Google')

    # 修改所有的行
    # Test.objects.all().update(name='Google')

    return HttpResponse("<p>修改成功</p>")
  • 删除数据
def testdb4(request):
    # 删除id=1的数据
    test1 = Test.objects.get(id=1)
    test1.delete()

    # 另外一种方式
    # Test.objects.filter(id=1).delete()

    # 删除所有数据
    # Test.objects.all().delete()

    return HttpResponse("<p>删除成功</p>")

最后,修改 urls.py:

from django.conf.urls import *
from . import view, testdb

urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
    url(r'^testdb2$', testdb.testdb2),
    url(r'^testdb3$', testdb.testdb3),
    url(r'^testdb4$', testdb.testdb4),
]

启动服务器:

python manage.py runserver 0.0.0.0:8000

在浏览器访问 http://127.0.0.1:8000/testdb2,即可实验检测。

### 创建与开发 Django 模型 #### 定义模型类 在 Django 中,模型用于定义应用的数据结构和行为。每个模型都是一个 Python 类,继承自 `django.db.models.Model`[^3]。 ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) published_date = models.DateField() def __str__(self): return self.title ``` 此代码片段展示了如何创建名为 `Book` 的简单模型,其中包含三个字段:书名 (`title`)、作者(`author`) 和出版日期 (`published_date`)。 #### 执行迁移操作 编写好模型之后,需执行迁移命令使这些更改生效于数据库中。这一步骤会将 Python 代码转换为 SQL 并实际创建相应的表格[^5]。 ```bash python manage.py makemigrations python manage.py migrate ``` 上述两条指令分别负责生成新的迁移文件以及应用这些变更至目标数据库内。 #### 注册管理界面 为了让新建立的模型能够在 Django 管理后台显示出来,还需要对其进行注册: ```python # admin.py 文件内容如下所示: from django.contrib import admin from .models import Book admin.site.register(Book) ``` 这样管理员就可以通过 Web 接口轻松管理和维护书籍记录了。 #### 测试模型功能 最后可以通过 Django shell 来测试刚刚创建好的模型是否正常工作: ```bash python manage.py shell ``` 进入交互环境后尝试添加一条数据验证其可用性: ```python >>> from myapp.models import Book >>> new_book = Book(title="Django入门", author="张三", published_date='2023-09-08') >>> new_book.save() ``` 以上就是完整的 Django 模型创建流程介绍[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值