django orm原理_Django模型[ORM框架简介]

ORM框架

O是object,也就 类对象 的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是 映射 的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们 通过类和类对象就能操作它所对应的表格中的数据 。ORM框架还有一个功能,它可以 根据我们设计的类自动帮我们生成数据库中的表格 ,省去了我们自己建表的过程。

django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。

使用django进行数据库开发的步骤如下:

1.在models.py中定义模型类

2.迁移

3.通过类和对象完成数据增删改查操作

下面我们以保存图书信息为例来给大家介绍Django中进行数据库开发的整个流程。

进入虚拟环境h1_django。

workon h1_django

创建项目

django-admin startproject test2

创建应用

python manage.py startapp bookest

mysql添加数据库test2

creat database test2 charset=utf8;

修改配置文件

#INSTALLED_APPS项添加

'booktest',

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'test2', #数据库名字,

'USER': 'root', #数据库登录用户名

'PASSWORD': 'mysql', #数据库登录密码

'HOST': 'localhost', #数据库所在主机

'PORT': '3306', #数据库端口

}

}

添加test2/init.py文件

import pymysql

pymysql.install_as_MySQLdb()

添加booktest/models.py文件

from django.db import models

#定义图书模型类BookInfo

class BookInfo(models.Model):

btitle = models.CharField(max_length=20)#图书名称

bpub_date = models.DateField()#发布日期

bread = models.IntegerField(default=0)#阅读量

bcomment = models.IntegerField(default=0)#评论量

isDelete = models.BooleanField(default=False)#逻辑删除

#定义英雄模型类HeroInfo

class HeroInfo(models.Model):

hname = models.CharField(max_length=20)#英雄姓名

hgender = models.BooleanField(default=True)#英雄性别

isDelete = models.BooleanField(default=False)#逻辑删除

hcomment = models.CharField(max_length=200)#英雄描述信息

hbook = models.ForeignKey('BookInfo')#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中

生成迁移文件与执行

python manage.py makemigrations

python manage.py migrate

底层部分完成

插入数据

insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values

('射雕英雄传','1980-5-1',12,34,0),

('天龙八部','1986-7-24',36,40,0),

('笑傲江湖','1995-12-24',20,80,0),

('雪山飞狐','1987-11-11',58,24,0);

insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values

('郭靖',1,1,'降龙十八掌',0),

('黄蓉',0,1,'打狗棍法',0),

('黄药师',1,1,'弹指神通',0),

('欧阳锋',1,1,'蛤蟆功',0),

('梅超风',0,1,'九阴白骨爪',0),

('乔峰',1,2,'降龙十八掌',0),

('段誉',1,2,'六脉神剑',0),

('虚竹',1,2,'天山六阳掌',0),

('王语嫣',0,2,'神仙姐姐',0),

('令狐冲',1,3,'独孤九剑',0),

('任盈盈',0,3,'弹琴',0),

('岳不群',1,3,'华山剑法',0),

('东方不败',0,3,'葵花宝典',0),

('胡斐',1,4,'胡家刀法',0),

('苗若兰',0,4,'黄衣',0),

('程灵素',0,4,'医术',0),

('袁紫衣',0,4,'六合拳',0);

定义视图

添加booktest/views.py

from django.shortcuts import render,redirect

from booktest.models import *

from datetime import date

#查询所有图书并显示

def index(request):

list=BookInfo.objects.all()

return render(request,'booktest/index.html',{'list':list})

#创建新图书

def create(request):

book=BookInfo()

book.btitle = '流星蝴蝶剑'

book.bpub_date = date(1995,12,30)

book.save()

#转向到首页

return redirect('/')

#逻辑删除指定编号的图书

def delete(request,id):

book=BookInfo.objects.get(id=int(id))

book.delete()

#转向到首页

return redirect('/')

配置url

添加test2/urls.py

from django.conf.urls import include, url

from django.contrib import admin

urlpatterns = [

url(r'^admin/', include(admin.site.urls)),

#引入booktest的url配置

url(r'^',include('booktest.urls')),

]

创建booktest/urls.py

from django.conf.urls import url

from booktest import views

urlpatterns=[

url(r'^$',views.index),

url(r'^delete(\d+)/$',views.delete),

url(r'^create/$',views.create),

]

配置文件添加模板

'DIRS': [os.path.join(BASE_DIR,'templates')],

创建templates/booktest/index.html文件

复习案例

创建

{%for book in list%}

{{book.btitle}}-- 删除

{%endfor%}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值