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和数据库打交道的模型层的一些主要操作。
来源:oschina
链接:https://my.oschina.net/u/4416802/blog/3845111