一步一步的django学习---004

陌路散爱 提交于 2020-04-27 02:34:00

Django模型(数据处理)

Django对各种数据库提供了很好的支持,包括:Mysql、Oracle;

Django为这些数据库提供了统一的API。下面开始用Django会会我们的数据库。

一、数据库的基本连接配置:

安装数据库驱动:

1. windows在cmd中输入:pip install mysqlclient(通常都不会成功,如果你运气好,成功了,那你可以买彩票了,但是提出这种方法,当然是一种最常用的方法,可能由于计算机结构的改变,这种方式到我现在变得不适用了)

   下面是解决方法:

  错误类型:cannot open include file:'mysql.h' No such file or directory(反正一大堆,根本原因是这个)

  解决方案:使用whl安装

             (1)安装 wheel :在cmd中输入:pip install wheel

             (2)找到whl 文件:网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#

                                              文件:mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl(可以选择最新版)

             (3)安装文件:在cmd中找到 mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl所在位置

                                         执行:pip install wheel mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl

经过上面的解决方案,我们可以顺利的安装mysqlclient了。接下来,要在我们的Django项目里进行数据库的配置(简单的说,就是在Django里输入登录数据库的条件,并进行预设置,Django会把这些信息提交到mysqlclient中,那样,我们的项目便拥有了操作数据库的权限了。)

 

数据库配置:

找到Django项目中的settings.py文件中的DATABASE部分,然后按照下面的信息进行修改。

注意:如果你在settings.py文件中加入了中文注释,请务必在文件头部加入:# -*- coding:UTF-8 -*-;

  

 1 DATABASE = {
 2         'default' : {
 3                'ENGINE' : 'django.db.backends.mysql' ,
 4                'NAME' : 'test' ,  #我们的数据库名
 5                'USER'  : 'root' , #我们登录Mysql时的账户名
 6                'PASSWORD' : 'rootroot' , #我们登录Mysql时的账户密码
 7                'HOST' : 'localhost' ,  #我们数据库的路径名
 8                'PORT' : '3306'  , #我们数据库的端口,通常Mysql默认的是3306
 9         }
10 }

数据库配置完成之后,我们需要在Django中设置一个模型层来接收相应的数据。

 

定义模型和配置模型:

 1.创建APP:Django规定,如果要使用模型,必须要创建一个app.创建方法如下:

  在cmd中,将位置定位到项目的根目录,并且接下来输入以下代码:

  

1 django-admin startapp TestModel

这里的django-admin是在python的文件路径中,在django的安装时就已经存在了。因此,别担心我们所在的路径下没有django-admin.

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

#model.py
# -*- coding:UTF-8-*-
from django.db import models

class Test(models.Model):  #这里·的类名等同于我们数据库中的表名,并且继承了django的models.Model类。虽然不知道被继承的类是什么样子,但是观察数据库,我们会发现,数据库中多了一个Test表,包含我们下面所写的字段。
        name = models.CharField(max_length=20)# name 是字段,models.CharFied 是字段的类型,max_length对应了字段的最大长度,和mysql定义数据表字段时大同小异。

这一步是将django模型和数据库的表进行了一一对应。下面我们该干嘛呢?我们创建好了我们的模型,但是对于Django来说,他并不知道,下面。我们要让django知道我们所创建的模型,并且通过预先在settings.py留下的DATABASE信息,来实现django和数据库的真正连接。下面就是我们要告诉django我们把模型建好了。

3.配置模型信息

 找到settings.py中的INSTALLED_APPS添加我们所创建的模型

#settings.py
INSTALLED_APPS = {
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'TestModel',     #添加此项

是的经过以上步骤,我们将数据库的模型基本配置完毕,并且基本完成和数据库的连接条件。但是,设置好归设置好,没有进行刷新还是处于没用的状态,要将Django的配置进行刷新,并且赋予对应的权限,根据模型,在数据库中创建表;

赋予权限,在数据库中创建表结构:

#cmd中,将文件位置定位到manage.py所在的文件夹,输入以下命令
Python manage.py migrate  #对权限进行唤醒
python manage.py makemigrations TestModel #django找到我们对应的模型
python manage.py migrate TestModel #在数据库中创建表结构

经过上面步骤,我们会发现,数据库中出现了我们经过模型创建的表。

数据库中我们所创建表的命名格式:

模型名_模型下面的设置的表名。

好了,经过以上步骤,我们正式和数据库取得了正式的连接。

 

二、数据库的操作

前期准备:   

    1.建立测试文件testdb.py,文件路径:和urls.py在同一个路径

    2.修改urls.py增加:

       

1 from django.conf.urls import *
2 from . import view,testdb
3 
4 urlpatterns = [
5       url(r'^hello$',view.hello),
6       url(r'^testdb$,testdb.testdb), #增加行
7 ]

正式操作

     1.添加数据(增)

     添加数据需要先创建对象,然后再执行sava函数,相当于SQL中的IINSERT:testdb.py作为测试文件

1 # -*- coding: utf-8 -*-
2 from django.http import HttpResponse
3 from TestModel.models import Test
4 
5 #数据库操作
6 def testdb(request):
7      test1=Test(name='cremiy')
8      test1.save()
9      return HttpResponse("<p>数据添加成功!</p>")

    2.获取数据(查)

    Django提供了多种方式来获取数据库的内容,我们可以在文件testdb.py中进行测试

    

 1 # -*- coding:utf-8 -*-
 2 #testdb.py
 3 from django.http  import HttpResponse
 4 from TestModel.models import Test
 5 
 6 #数据库操作
 7 def testdb(request):
 8 #初始化
 9      response = ""
10      response1 = ""
11 
12 #通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的 SELECT* FROM
13     list = Test.objects.all()
14 
15 #filter相当于SQL中的WHERE,可设置条件过滤结果
16     response2 = Test.objects.filter(id=1)
17     
18 #获取单个对象
19     response3 = Test.objects.get(id=1)
20 
21 #限制返回的数据条数,相当于sql中的 offset 0 limit 2,取得排好序后的前三条数据。
22     Test.objects.order_by('name')[0:2]
23 
24 #根据字段排序
25     Test.objects.order_by('字段名')
26 
27 #获取数据时筛选的方法组合使用
28     Test.objects.filter(name='cremiy').order_by("id")
29 
30 #输出获取的所有数据
31     for var in list:
32          response1 += var.name + " "
33     response = response1
34     return HttpResponse("<p>" + response + "</p>"

   3. 更新数据(改)

      修改数据通常有save()或 update():

 1 #testdb.py
 2 # -*- coding: utf-8 -*-
 3 from django.http import HttpResponse
 4 
 5 from TestModel.models import Test
 6 
 7 #数据库操作
 8 def  testdb(request):
 9 #修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
10        test1 = Test.objects.get(id=1)
11        test1.name = 'google'
12        test1.save()
13 
14 #采用组合操作的方式update
15       Test.objects.filter(id=1).update(name='google')
16 
17 #修改所有的列
18        Test.objects.all().update(name='google')
19 
20        return HttpResponse("<p>修改成功</p>")

   4.删除数据(删)

 1 #testdb.py
 2 
 3 # -*- coding:utf-8 -*-
 4 
 5 from django.http import HttpResponse
 6 
 7 from TestModel.models import Test
 8 
 9 #数据库操作
10 def  testdb(request):
11       test1 = Test.objects.get(id=1) #获得对应元组的控制权
12       test1.delete()
13    
14 #组合方式操作
15       Test.objects.filter(id=1).delete()
16 
17 #删除数据库的所有数据
18        Test.objects.all().delete()
19        return HttpResponse("<p>删除成功</p>

 

   以上就是ajango和数据库打交道的模型层的一些主要操作。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!