Django入门(十一):模型(与数据库交互)

介绍Django与数据库交互:如创建表、增、删、改、查等操作的学习。

Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。其中MySQL 是 Web 应用中最常用的数据库。本章节我们将以 Mysql 作为实例进行介绍。你可以通过我的mysql入门学习专栏了解更多 MySQL 的基础知识。MySQL+MySQLworkbench数据库的入门学习_DOT Manager的博客-CSDN博客

Django 为以上这些数据库提供了统一的调用API,当然包括Mysql,当然 我们也可以根据自己业务需求选择不同的数据库,

1. 首先安装pymysql

因为PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库, 如果你没安装 mysql 驱动,可以执行以下命令安装:

pip install pymysql

2. Django ORM介绍

Django 模型使用自带的 ORM。

ORM的意思是:对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。

ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。

ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

因为通常数据库采用PHP语言编写,因此需要这样的中间桥梁充当翻译:

ORM的优缺点:

使用 ORM 的好处:

  • 提高开发效率。
  • 不同数据库可以平滑切换。

使用 ORM 的缺点:

  • ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
  • 长期写 ORM 代码,会降低编写 SQL 语句的能力。

ORM 解析过程:

  • 1、ORM 会将 Python 代码转成为 SQL 语句。
  • 2、SQL 语句通过 pymysql 传送到数据库服务端。
  • 3、在数据库中执行 SQL 语句并将结果返回。

ORM 对应关系表:

3. 数据库配置

Django 如何使用 mysql 数据库

1. 创建 MySQL 数据库,格式如下:( ORM 无法操作到数据库级别,只能操作到数据表)

create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8

举例:创建一个名为 mydb 数据库,编码指定为 utf8: 

create database mydb default charset=utf8;   

创建数据库的过程请浏览我如下文章地址:

mysql数据库的登录、创建和删除-CSDN博客

2. 现在我们已经创建了mybd数据库,此时我们需要在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:

这是默认的代码:

需改为如下的代码: 

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

上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置相同。Django 根据这一设置,与 MySQL 中相应的数据库和用户连接起来。

注意:如果你使用了 Python2.x 版本这里添加了中文注释,所以你需要在 HelloWorld/settings.py 文件头部添加 # -*- coding: UTF-8 -*-。

3. 接下来,告诉 Django 使用 pymysql 模块连接 mysql 数据库:

在与 settings.py 同级目录下的 __init__.py 中输入如下代码:

# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置 
import pymysql
pymysql.install_as_MySQLdb()

4. 定义模型

创建 APP

Django 规定,如果要使用模型,必须要创建一个 app。

拓展阅读:


app应用与project项目的区别:
    一个app实现某个功能,比如博客、公共档案数据库或者简单的投票系统;
    一个project是配置文件和多个app的集合,这些app组合成整个站点;
    一个project可以包含多个app;一个app可以属于多个project!

app的存放位置可以是任何地点,但是通常都将它们放在与manage.py脚本同级的目录下,这样方便导入文件。

app: 可复用的,独立的模块,不与其他 app 混在一起,在不做任何修改的情况下可以把整个 app 移动到别的 project 中使用,类比第三方库那样。

project包含一些全局配置,这些配置构成一个全局的运行平台,各个APP都运行在这个全局的运行平台上,而APP代表的是一个相对独立的功能模块,所以程序的逻辑都在APP中。


1. 我们使用以下命令创建一个名叫 TestModel 的 app:

首先进入到项目根目录下,打开cmd,使用django-admin startapp TestModel 创建一个名字叫TestModel的app,代码如下:

D:\Djangospace\demo\demo02>django-admin startapp TestModel

创建好后的目录结构树如下:(注意TestModel与manage.py同级) 

 

2.  修改 TestModel/models.py 文件,代码如下:

# models.py
from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20)

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

3. 然后在 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',               # 添加此项
)

4. 创建表结构

在项目根目录的cmd命令行中运行:python manage.py migrate   ,如下代码:

D:\Djangospace\demo\demo02>python manage.py migrate

如果执行以上命令时可能会出现如下报错信息:

原因是 MySQLclient 目前只支持到 Python3.4,因此如果使用的更高版本的 python,需要修改如下:

通过报错信息的文件路径找到 C:\Users\xxx\AppData\Local\anaconda3\Lib\site-packages\django\db\backends\mysql 这个路径里的 base.py 文件,

然后把这两行代码注释掉(代码在文件开头部分):

 再次尝试输入:D:\Djangospace\demo\demo02>python manage.py migrate,此时如下图,成功了

结果如下(以前没有任何表;执行之后出现以下表):

5. 让 Django 知道我们在我们的模型有一些变更,输入如下代码;

D:\Djangospace\demo\demo02>python manage.py makemigrations TestModel

6. 创建表结构:

   输入如下代码:

D:\Djangospace\demo\demo02>python manage.py migrate TestModel

结果,执行之后创建了表 testmodel_test: 

表名组成结构为:应用名_类名(如:TestModel_test)。

注意:尽管我们没有在 models 给表设置主键,但是 Django 会自动添加一个 id 作为主键。

5. 数据库操作 

接下来我们在 demo2目录中添加 testdb.py 文件,如下图所示:

修改 urls.py:

from django.urls import path
from . import views,testdb     #新增加testdb

urlpatterns = [

    path('mytemp/', views.mydef),
    path('base/', views.mydefB),
    path("testdb/",testdb.testdb), #新增加路由
]

添加数据

添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:

在testdb.py中输入如下代码:

from django.http import HttpResponse

from TestModel.models import Test
# 数据库操作
def testdb(request):
    test1 = Test(name='firstname')
    test1.save()
    return HttpResponse("<p>数据添加成功!</p>")

访问  http://127.0.0.1:8002/testdb/  就可以看到数据添加成功的提示。 

 

MySQL 结果如下:可以看到我们新加的firstname已经出现

获取数据 

Django提供了多种方式来获取数据库的内容,如下代码所示:

from django.http import HttpResponse

from TestModel.models import Test
# 数据库操作
def testdb(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="firstname").order_by("id")

    # 输出所有数据
    for var in list:
        response1 += var.name + " "
    response = response1
    return HttpResponse("<p>" + response + "</p>")

结果如下: 访问  http://127.0.0.1:8002/testdb/ 

修改数据 

 修改数据可以使用 save() 或 update():

from django.http import HttpResponse
 
from TestModel.models import Test
 
# 数据库操作
def testdb(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>")

结果如下: 访问  http://127.0.0.1:8002/testdb/ 

再看一下数据库,发现已经修改成google

删除数据 

删除数据库中的对象只需调用该对象的delete()方法即可:

from django.http import HttpResponse

from TestModel.models import Test


# 数据库操作
def testdb(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>")

结果如下: 访问  http://127.0.0.1:8002/testdb/  

再看一下数据库,发现已经删除了第一行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python是一种非常流行的编程语言,它可以支持各种类型的应用程序开发,并且有着优秀的编码效率和代码可读性,因此被广泛应用。而Django作为Python语言下最流行的开源Web应用程序框架之一,被广泛应用。那么Python Django项目源码是指针对Django框架而言的项目源码。在实际应用开发中,需要根据具体的需求设计开发各种类型的Django项目,包括Web应用、社交应用、电子商务应用等等,并且这些应用之间还存在很大的差异。具体的Python Django项目源码需要根据项目类型、功能模块、技术架构等因素来进行设计、开发和实现。 Python Django项目源码的核心包括后端业务逻辑处理、数据库设计和管理、前端交互设计等三个部分。而其中最重要的是后端业务逻辑处理,需要编写完整的Django项目架构、视图函数、模型设计、表单设计等等。此外,还需要考虑如何优化项目性能,提高代码的复用性和可维护性,并且处理好各种异常情况等等。同时,前端部分也需要关注到用户体验,而具体实现可以使用 CSS、JavaScript等各种前端技术实现高级动画效果等等。 总之,通过Python Django项目源码的实现,可以加深对Django框架的理解和掌握,同时也能快速实现具体的应用开发,提高开发效率和应用程序性能。 ### 回答2: Python 语言特别适合于 Web 开发,这得益于其优秀的 Web 框架,比如 Django,它是一款 Python Web 开发框架,集成了很多便于开发的功能和工具,用于构建强大的 Web 应用,并且能够支持多个数据库,如 PostgreSQL,MySQL,SQLite 等。下面是 Python Django 项目源码的一些介绍。 Django 项目源码通常包含以下文件和目录: 1. `manage.py` 文件:一个用于启动 Django Web 应用的命令行工具,可以执行一些常用的操作,如创建数据库、迁移数据等。 2. `settings.py` 文件:Django 应用程序的主要设置文件,包含了并配置了系统的所有组件,例如数据库、模板、静态文件等。 3. `urls.py` 文件:Django 应用程序的 URL 配置文件,通常配置了应用程序的路由映射。 4. `views.py` 文件:Django 应用程序的视图文件,包含的函数用于处理 URL 请求并且返回 Web 页面,视图可以使用 templates 和其他 Python 库来创建返回的页面。 5. `models.py` 文件:Django 应用程序的模型文件,定义了应用程序中使用的数据模型,并且对于这些模型数据库中的表进行创建和管理。 6. `templates` 文件夹:Django 应用程序的 HTML 页面模板文件,这些文件通过传入视图中的数据来渲染成响应的页面。 7. `static` 文件夹:Django 应用程序的静态文件目录,包括 CSS, JS 和图片等。 8. `migrations` 文件夹:Django 应用程序的数据库迁移信息目录,通过对模型定义进行变更来管理数据库的升降级。 在 Django 项目开发时,我们通常会运用一系列的技术和工具,如 RESTful API、ORM 数据库模型、Redis 缓存、消息队列、Docker 容器等。同时,也可以使用 Django 的各种第三方插件和扩展,例如,Django REST framework、Django Celery 等。 总之,一份优秀的 Django 项目源码充满了创新、灵活性和可扩展性,可以轻松地用 Python 构建出一个威力强大的 Web 应用。 ### 回答3: Python Django 是一款十分流行的 Web 框架,可用于快速开发高效的 Web 应用程序。Django 项目源码包含在名为“Django”的 Python 包内,因此在开始编写 Django 项目之前,需要安装 Django 包。 Django 项目源码包括许多文件和文件夹,其中最重要的是项目的根目录文件夹。此文件夹包含用于配置 Django 应用程序的主要文件。其中,settings.py,urls.py 和 wsgi.py 文件是项目的核心文件,它们定义了项目的主要设置、路由和 Web 服务器接口。此外,根目录文件夹还包括名为 manage.py 的文件,它是 Django 项目的命令行工具。通过 manage.py 文件,您可以执行许多任务,例如启动项目、执行数据库迁移、运行测试等。 在项目根目录文件夹中,还包括一个名为 “apps” 的子文件夹,其中包含所有应用程序。每个应用程序都有自己的模板、静态文件和视图等,因此 Django 能够提供高度模块化且可重用的应用程序。应用程序的开发需要在此文件夹中创建相应的子文件夹。 在 Django 项目的开发中,大约90% 的工作都是编写 Python 代码,包括定义 Django 数据模型、视图函数、表单、信号等等。Django 使用一种名为 Model-View-Controller(MVC)的框架,通过将应用程序分解成数据模型、视图和控制器组件来实现这一目的。Django 鼓励开发人员使用易于阅读和可重用的 Python 代码,从而有效地提高项目的可维护性和可扩展性。 总之,Django 项目源码是一个高效且功能强大的 Web 框架,具有一组完整而易于理解且容易实现的开发工具。通过将代码编号模块化和重用最大化,Django 使 Web 应用程序的快速开发变得容易和高效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DOT Manager

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

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

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

打赏作者

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

抵扣说明:

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

余额充值