初学Django基础02
时间:2019-10-22
本文章向大家介绍初学Django基础02,主要包括初学Django基础02使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
django的ORM操作
之前我们知道了models.py这个文件,这个文件是用来读取数据结构的文件,每次操作数据时都走这个模块
常用字段
AutoField
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
IntegerField
一个整数类型,范围在 -2147483648 to 2147483647。
CharField
字符类型,必须提供max_length参数, max_length表示字符长度。
DateField
日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。
DateTimeField
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。
创建表结构
#models.py
from django.db import models # Create your models here. class Nav(models.Model): name = models.CharField(max_length=10, unique=True, verbose_name='导航名称') # max_length最大个数,unique是否唯一,verbose_name表的中文名 is_delete = models.SmallIntegerField(default=1, verbose_name='是否被删除') # default默认值 create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) # auto_now_add插入数据的时候,自动取当前时间 update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True) # auto_now修改数据的时候,时间会自动变 def __str__(self): return self.name # __str__如果不写打印的是一个对象,加上这段可以打印name值 class Meta: # 表结构的其他信息 verbose_name = '导航表' # 表的中文名 verbose_name_plural = verbose_name # 表的中文名 db_table = 'nav' # 表名 # ordering = ['update_time']#查询数据的时候,用来排序的 class Article(models.Model): title = models.CharField(max_length=20, verbose_name='文章名称') content = models.TextField(null=True, verbose_name='文章内容') # null 是否为空 img = models.ImageField(upload_to='article_img', null=True, verbose_name='文章图片', default='article_img/1.jpg') # ImageField上传文件,upload_to上传了图片会在setting设置的MEDIA_ROOT路径下自动创建一个article_img的文件夹,注意要使用文件上传必须安装pillow模块 file = models.FileField(upload_to='file_img', verbose_name='文件图片') # FileField与ImageField的唯一不同是ImageField只能上传图片格式的文件,而FileField能上传所有文件 is_delete = models.SmallIntegerField(default=1, verbose_name='是否被删除') nav = models.ForeignKey(Nav, verbose_name='导航id', on_delete=models.DO_NOTHING, db_constraint=False) # 外键 create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True) def __str__(self): return self.title class Meta: db_table = 'article'
运行到数据库中
python manage.py makemigrations #生成迁移文件
python manage.py migrate #同步到数据库中
djangoORM的增删改查
# 这三句表示告诉django我要操作哪个数据库 import django, os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dj_test.settings') # 设置django的配置文件 django.setup() # 配置并检查 from user import models # 找到对应的表结构文件 # 新增 models.Nav.objects.create(name='我的日记') # 这样也可以新增 nav_obj = models.Nav(name='我的心情', is_delete=1) nav_obj.save() # 查询 # get方法查询的话,必须得保证这个数据查出来只有1条,才可以 result = models.Nav.objects.get(is_delete=1) print(result.name) # 加了filter搜索出来的结果就有可能是多条 result0 = models.Nav.objects.filter(is_delete=1, name='我的心情') # and result1 = models.Nav.objects.filter(name__contains='我的') # 模糊查询 result1_1 = models.Nav.objects.filter(create_time__endswith='84') # 查询匹配结尾字符 result1_2 = models.Nav.objects.filter(create_time__startswith='2019') # 查询匹配开头字符 result1_3 = models.Nav.objects.filter(create_time__isnull=True) # 查询是否为空的 result2 = models.Nav.objects.filter(id__gt=0) # 大于0 result3 = models.Nav.objects.filter(id__gte=1) # 大于等于1 result4 = models.Nav.objects.filter(id__lt=2) # 小于2 result5 = models.Nav.objects.filter(id__range=[1, 5]) # 一个范围之间 result6 = models.Nav.objects.filter(id__in=[1, 2, 3, 5, 6]) # in result7 = models.Nav.objects.exclude(id=1) # 排除,除了id为1的 from django.db.models import Q result8 = models.Nav.objects.filter(Q(name__contains='6') | Q(name__contains='3')) # 或 result9 = models.Nav.objects.all().filter(name__contains='6') # 获取表里面所有的数据 result10 = models.Nav.objects.all().filter(name__contains='6').count() # count可以获取个数 result11 = models.Nav.objects.all().filter(name__contains='6').values() # values返回字典显示 result12 = models.Nav.objects.raw('select * from nav') # 执行原生sql # 修改 # 此方法修改就是对一个值重新赋值的方式 n = models.Nav.objects.get(id=1) # parimy key n.name = 'wo的相册2' n.is_delete = 1 n.save() models.Nav.objects.all().update(is_delete=0) # 更新表里面所有数据 models.Nav.objects.filter(name__contains='我的').update(is_delete=1) # 根据条件 # 删除 models.Nav.objects.all().delete() # 删除表里面所有数据 models.Nav.objects.filter(id__lt=3).delete() # 根据条件删除 n = models.Nav.objects.get(id=3) # parimy key单个删除 n.delete() # 反向查询 art_obj = models.Nav.objects.get(name='我的日记3') print(art_obj.article_set.filter()) # 外键反向查询 # nav_obj.article_set.add(art_obj)#添加 # nav_obj.article_set.remove(art_obj)#删除 # nav_obj.article_set.clear()#清空
原文地址:https://www.cnblogs.com/RainBol/p/11718456.html
- hdu---1024Max Sum Plus Plus(动态规划)
- Go语言异步服务器框架原理和实现
- nyoj------布线问题(kruscal+求最小值)
- nyoj-----127星际之门(一)
- nyoj------20吝啬的国度
- HDUOJ-------2493Timer(数学 2008北京现场赛H题)
- go sync.Mutex 设计思想与演化过程 (一)
- HDUOJ--------A simple stone game(尼姆博弈扩展)(2008北京现场赛A题)
- HDUOJ----2485 Destroying the bus stations(2008北京现场赛A题)
- Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑
- Node.js真的无所不能?那些不适用的应用领域分析
- hdu-----2491Priest John's Busiest Day(2008 北京现场赛G)
- nyoj------79拦截导弹
- HDUOJ-------2719The Seven Percent Solution
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C#代码折叠#region
- c#实时显示时间 C#-WinForm-Timer控件
- 记一次 JAVA 的内存泄露分析
- for循环、递归、回溯
- delete 后加 limit 是个好习惯么?!
- @Component,@Service 等注解是如何被解析的
- 怎么摆脱又臭又长的 Git 命令?
- Redis 怎么防止数据丢失?面试必问!
- 使用vs2015编写c语言的方法
- 哪些场景会产生OOM?怎么解决?
- 预处理命令
- IntelliJ IDEA 调试 Java 8 Stream,实在太香了!
- 仅需四步,写一个 Spring Boot Starter
- 一个简单案例,带你看懂GC日志!
- C#中ref和out的区别使用