在django模型中负责与数据库交互的为Model层,Model层提供了一个基于orm的交互框架
一:创建一个最基本的Model
from __future__ import unicode_literals
from django.db import models
import time
from Model.usertype import usersType class userInfo(models.Model):
username=models.CharField(max_length=100)
passwd=models.CharField(max_length=20)
sex=models.BooleanField() 以上代码将创建一个最基本的Model模型,userinfo类名称实际性对应的为数据库中表的名称,具体的名称将由django自动生成相应的表名称,如:web_userinfo表名,通常是由app的名称+类名组成表名,所以app一定要注册到工程中才可以生成相应的表名及相关字段
同时,如果在Model中没有显式指定一个主键,django将生成一个默认的数值型的自增长id主键
同时在创建model是可以给字段指定默认值
class userInfo(models.Model):
username=models.CharField(max_length=100)
passwd=models.CharField(max_length=20)
sex=models.BooleanField()
typeId=models.ForeignKey('usersType') class usersType(models.Model):
username=models.CharField(max_length=50)
job=models.CharField(max_length=20)
通过以上设置后即对两个Model中建立外键关系,即从userType到userinfo产生一对多的对应关系 当需要建立多对多的关系的时候通常有两种做法,一种是基于django特性的,另一种是非基于django特性的,但是两者的本质相同,都是通过中间表来实现最终目的 非django特性的即在两个Model之后再建立一个Model实体,在另外的两个实体中与其建立外键关系,显式的构建中间表来处理 基于django特性的即通过ManyToManyField来隐式构建中间表处理此类问题 针对django特性的范例代码如下:
class Group(models.Model):
Name=models.CharField(max_length=50)
class user(models.Model):
Name=models.CharField(max_length=100)
email=models.EmailField()
rel_group=models.ManyToManyField('Group')
在运行数据库的同步命令后以上代码将在数据中建立三张表,其中一张中间表将自动建立 更多的字段参数:
auto_now_add=True代表该字段所在行的数据建立时更新该字段
updatetime=Models.DateTimeField(auto_now=True) 代表数据更新时自动更新 django中数据库的操作: 数据库的底层操作借助继承自django框架的已封装至mode层,但是对这些操作的调用通常在view层实现,在mtv框架中view层相当于mvc的controller负责视图与实体之间桥梁工作 以web的App为例,view层的代码如下: Create:
def add(request,hostname):
try:
Asset.objects.create(hostname=hostname) return HttpResponse('ok')
except Exception as err:
return HttpResponse(err)
以上代码即实现了对数据库写入一条数据的目的
由于实体继承自Model,而django的Model对数据的操作封装在了实体的objects下,所以对数据的操作应该是Model类名.objects.操作方法( Asset.objects.create(hostname=hostname)) 在以上方法中,request参数为必选项,代表了当前请求的上下文内容,第二个参数为hostname,代表从url中传递到方法中的参数,即相当于http://127.0.0.1/web/add/hp,hp即对应hostname
然后需要在urls.py中配置相应的路由映射
如:url(r'^add/(?P<hostname>\w*)/$',add),
运行访问:http://127.0.0.1:8000/web/add/ibm
页面返回"ok"没有报错内容时查看数据库是否已经写入内容,如果输出ok时却没有发生异常,数据写入已完成
Remove:
def delete(request,id):
try: obj=Asset.objects.get(id=id)
if obj:
obj.delete()
return HttpResponse('操作成功')
else:
return HttpResponse('不存在指定id') except Exception as err:
return HttpResponse(err) 配置相应的url映射如下:
url(r'^del/(?P<id>\d*)/$',delete), 访问url http://127.0.0.1/web/del/1无异常后查看数据库变化 Update:
def update(request,id,name):
'''
更新
:param request:
:param id:
:param name:
:return:
'''
try:
obj=Asset.objects.get(id=id)
obj.hostname=name
obj.save()
return HttpResponse('ok')
except Exception as err:
return HttpResponse(err)
配置Url映射:
url(r'^update/(?P<id>\d*)/(?P<name>\w*)/$',update), 访问http://127.0.0.1/web/update/1/jay后查看数据库内容 Query:
def query(request,name):
Asset.objects.filter(hostname__contains=name)
return HttpResponse('ok')
以上为模乎查询相当于sql中的likem 对于数据的查询还有一种方法就是使用get,在update时已经使用过,如下:
obj=Asset.objects.get(id=id)
使用filter与使用get的区别就是使用get时返回音箱数据直接对应实体模型,但昌所查询的数据如果在数据库中不存在是将报借,但是使用filter返回的是django封装的queryset类型的数据 其它:
django Model模型二及Model模型对数据库的操作的更多相关文章
-
django中orm多表查询,减少数据库查询操作
.select_related() 的使用
-
64、django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
-
67、django之模型层(model)--查询补充及mookie
本篇导航: F查询与Q查询 cookie 一.F查询与Q查询 1.以Book表为例 class Book(models.Model) : title = models.CharField(max_le ...
-
django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
-
django之模型层(model)--查询补充及cookie
已经连续写了好几篇django的模型层(model)增删改查的随笔了,没篇大篇幅都是查询相关的操作,可以看出查询在数据的操作中是多么的重要,而本篇最后再补充一点关于关于查询的一些方法,模型层基本的操作 ...
-
CSS3与页面布局学习笔记(二)——盒子模型(Box Model)、边距折叠、内联与块标签、CSSReset
一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...
-
django “如何”系列3:如何编写模型域(model filed)
django自带很多的域类--CharField,DateField等等--,如果django的这些域都不能满足你精确的要求,那么你可以编写自己的模型域. django自带的域没有和数据库列类型一一对 ...
-
ASP.NET MVC Model之二模型绑定
Asp.net mvc中的模型绑定,或许大家经常用,但是具体说他是怎么一回事,可能还是会有些陌生,那么,本文就带你理解模型绑定.为了理解模型绑定,本文会先给出其定义,然后对通过比,来得出使用模型绑定的 ...
-
{django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
随机推荐
-
linux 解压命令
.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!) ------------------------ ...
-
HDU5779 Tower Defence (BestCoder Round #85 D) 计数dp
分析(官方题解): 一点感想:(这个题是看题解并不是特别会转移,当然写完之后看起来题解说得很清晰,主要是人太弱 这个题是参考faebdc神的代码写的,说句题外话,很荣幸高中和faebdc巨一个省,虽然 ...
-
Away3d 基础 1 ---对一个简单类的解释
转自:http://www.cnblogs.com/nooon/archive/2009/05/16/1458334.html 原英文地址: http://www.flashmagazine.com/ ...
-
浅谈二维RMQ
针对一些二维区间最值问题,用一维RMQ来解决显然是不够的.所以,要改进算法.鉴于网上没有PASCAL版的RMQ标程与解析,所以小可在这里简单的讲一下. 核心思想和一维的一样,只是在计算区间时略有不同. ...
-
Eclipse3.6 添加JUnit源代码
Eclipse中无法查看JUnit源代码,也无法设置源代码的jar. 解决方法: 1. 下载org.junit.source_4.8.1.v4_8_1_v20100427-1100.jar,放到ec ...
-
Shell中一键添加作者,版权信息
第一步:编辑/etc/vimrc文件 [root@proxy ~]# cp /etc/vimrc /etc/vimrc.ori [root@proxy ~]# vim /etc/vimrc 第二步:直 ...
-
Error:Failed to load project configuration:xxxxxxxxxxxxxxxxxxxx cannot read file .idea/misc.xml
你这idea不会没有配置默认jdk吧?你看看File--other settings--default project structure,看看project setting的project里面,有没 ...
-
Swift搭建服务端
原文:Hello Server Side Swift 作者:Logan Wright 译者:CocoaChina--kmyhy(博客) 自从苹果官方发布了一个 Swift 的 Linux 开源版本之后 ...
-
django drf 基础学习4
0 简介:介绍ModelViewSet基本使用规则1 views引用以及初始化 from rest_framework.viewsets import ModelViewSet clas ...
-
Pytorch报错记录
1.BrokenPipeError 执行以下命令时: a,b = iter(train_loader).next() 报错:BrokenPipeError: [Errno 32] Broken pip ...