day07 ORM中常用字段和参数

今日内容

  • 常用字段
  • 关联字段
  • 测试环境准备
  • 查询关键字
  • 查看ORM内部SQL语句
  • 神奇的双下划线查询
  • 多表查询前提准备

常用字段

字段类型

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()实例 #应用上面自定义的char类型
class Class(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
class_name=FixCharField(max_length=16)
gender_choice=((1,'男'),(2,'女'),(3,'保密'))
gender=models.SmallIntegerField(choices=gender_choice,default=3)
publish_time = models.DateField(auto_now=True,auto_now_add=True)

字段参数

null
用于表示某个字段可以为空。 unique
如果设置为unique=True 则该字段在此表中必须是唯一的 。 db_index
如果db_index=True 则代表着为此字段设置索引。 default
为该字段设置默认值。 DateField和DateTimeField # 年月日时分秒
auto_now_add
配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。 auto_now
配置上auto_now=True,每次更新数据记录的时候会更新该字段。

关系字段

ForeignKey:外键字段

# ForeignKey
外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。
ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。 # 字段参数
to
设置要关联的表 to_field
设置要关联的表的字段 on_delete
当删除关联表中的数据时,当前表与其关联的行的行为。 models.CASCADE
删除关联数据,与之关联也删除 db_constraint
是否在数据库中创建外键约束,默认为True。 def func():
return 10 class MyModel(models.Model):
user = models.ForeignKey(
to="User",
to_field="id",
on_delete=models.SET(func)
)

OneToOneField:外键字段

# 一对一字段。
通常一对一字段用来扩展已有字段。(通俗的说就是一个人的所有信息不是放在一张表里面的,简单的信息一张表,隐私的信息另一张表,之间通过一对一外键关联) # 字段参数
to
设置要关联的表。 to_field
设置要关联的字段。 on_delete
当删除关联表中的数据时,当前表与其关联的行的行为。(参考上面的例子)

ORM必知必会13条

创建表

from django.db import models
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8,decimal_places=2) # 浮点型
publish_time = models.DateField(auto_now=True,auto_now_add=True) # 年月日 # auto_now :每次修改数据会自动更新当前时间
# auto_now_add :仅在创建时自动更新时间,之后不是人为的修改,则时间一直不变 '''django自带的sqlite数据库功能非常的少 并且对日期格式不兼容'''
1.MySQL配置
2.数据库迁移命令
3.ORM查询关键字

测试环境准备

# 测试环境有两种
1.python console(pycharm下方自带)
2.py文件形式(参考manage.py前四行) # 随便创建一个py文件,添加一下几行代码
import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "py_dj7.settings")
import django
django.setup()
# 在该代码的下方才可以正常测试django文件

常用字段

# 只要是QuerySet对象,就可以无限制的调用QuerySet对象方法

1、all():查询所有结果
print(models.Book.objects.all())
'''QuerySet支持正数索引,不支持负数索引''' 2、filter(): 它包含了与所给筛选条件相匹配的对象 # 支持索引取值
print(models.Book.objects.filter(pk=1)) # fiter不加条件,也是查找所有
print(models.Book.objects.filter(pk=1).first()) # 拿去第一个数值
<QuerySet [<Book: 圣王>]> # QuerySet 列表套数据对象
'''
ilter可以写多个条件,并且中间用逗号当成and关系
pk相当于主键id,不在乎是id、uid等不同名称
可以根据索引取值,推荐使用first()
''' 3、first():返回第一个数据
print(models.Book.objects.filter(pk=1).first()) # 圣王 4、last():返回最后一个数据
print(models.Book.objects.all().last()) # 永生 4、 values(): values可以指定查询的字段,结果QuerySet 列表套字段,是一个可迭代的字典序列
print(models.Book.objects.values('title'))
<QuerySet [{'title': '圣王'}, {'title': '阳神'}, {'title': '遮天'}, {'title': '永生'}]>
'''
支持索引取值first()和last()、[0],但是不支持负数索引
''' 5、values_list():它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
print(models.Book.objects.values_list('title','price').first())
('圣王', Decimal('111.11')) 6、get():返回给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象不存在会抛出错误。
res = models.Book.objects.get(pk=1)
print(res,res.publish_time,res.price) # 圣王 2021-11-01 111.11 7、exclude(): 取反
print(models.Book.objects.exclude(pk=1)) 8、order_by():排序(从小到大)
print(models.Book.objects.order_by('price')) 9、reverse():反转,配合order_by
print(models.Book.objects.order_by('price').reverse()) 10、distinct():去重
res = models.Book.objects.all().values('title','price')
print(res.distinct())
<QuerySet [<Book: 圣王>, <Book: 阳神>, <Book: 遮天>, <Book: 永生>, <Book: 圣王>]>
'''注意:不加values会有id条件不同,索取去重的前提是把id过滤掉''' 11、count():计数
print(models.Book.objects.count()) # 4个 12、exisit():如果QuerySet包含数据,就返回True,否则返回False
print(models.Book.objects.filter(pk=10).exists()) # False 13、create():创建 14、update():修改 15、delete():删除 16、obj.save():保存

如何查看SQL语句

1、如果当前对象是queryset那么可以直接点query查找该对象内部SQL语句
res = models.Book.objects.all()
print(res.query) 2、settings.py配置文件(只要执行orm语句都会自动打印SQL语句)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}

神奇的双下划线查询

# 双下划线查询:
__gt:大于
__lt:小于
__gte:大于等于
__lte:小于等于
__in:在
__range:范围
__contains:包含
__startswith:以什么开头
__endswith:以什么结尾
_time__year:年
_time__month:月 案例1:查询书籍价格大于100的书
print(models.Book.objects.filter(price__gt=100)) # __gt:大于 案例2:查询书籍价格小于100的书
print(models.Book.objects.filter(price__lt=100)) # __lt:小于 案例3:查询书籍价格大于等于100的书
print(models.Book.objects.filter(price__gte=100)) # __gte:大于等于 案例4:查询书籍价格小于等于800的书籍
print(models.Book.objects.filter(price__lte=100)) # __lte:小于等于 案例5:查询书籍价格是92.12 或者35.60 或者111.11
print(models.Book.objects.filter(price__in=["92.12","35.60","111.11"])) #__in:在 案例6:查询书籍价格在100到200之间的书籍
print(models.Book.objects.filter(price__range=(100,200))) # __range:范围 案例7:查询书籍名称中包含字母p的书(区分大小写)
print(models.Book.objects.filter(title__contains='p')) # __contains:包含 案例8:查询书籍是否以...开头 ...结尾
print(models.Book.objects.filter(title__startswith='a')) # __startswith:以什么开头
print(models.Book.objects.filter(title__endswith='a')) # __endswith:以什么结尾 案例9:查询出版日期是2021的书(常用)
print(models.Book.objects.filter(publish_time__year=2021)) # _time__year:年
print(models.Book.objects.filter(publish_time__month=11)) # _time__month:月

day07 ORM中常用字段和参数的更多相关文章

  1. ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化

    聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...

  2. Django ORM中常用字段和参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

  3. Django ORM 常用字段和参数

    Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...

  4. Django框架 之 ORM 常用字段和参数

    Django框架 之 ORM 常用字段和参数 浏览目录 常用字段 字段合集 自定义字段 字段参数 DateField和DateTimeField 关系字段 ForeignKey OneToOneFie ...

  5. ORM常用字段和参数

    目录: ORM常用字段和参数

  6. Django中常用字段

    一.Django框架的常用字段 Django ORM 常用字段和参数 常用字段 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列 ...

  7. Django框架(十一)—— 常用字段、参数、元信息、多对多关联关系

    目录 常用字段和参数 一.ORM字段 二.ORM参数 三.关系字段 1.ForeignKey 2.OneToOneFiled 3.ManyToManyField 四.元信息 五.多对多关联关系的三种方 ...

  8. django orm介绍以及字段和参数

    Object Relational Mapping (ORM) orm介绍 orm概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数 ...

  9. Django创建数据库常用字段及参数

    Django创建数据库常用字段及参数 常用字段 1.models.AutoField 自增列= int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列 ...

随机推荐

  1. 字符串压缩 牛客网 程序员面试金典 C++ Python

    字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...

  2. 绝世好题(DP)

    题目链接:绝世好题 暴力就不用说了,和lis神似,O(n2)妥妥的挂掉,但可以得大部分分(好像是90,80)... 考虑优化,来一发非正解的优化: #include<bits/stdc++.h& ...

  3. STL 去重 unique

    一.unique函数 类属性算法unique的作用是从输入序列中"删除"所有相邻的重复元素. 该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度 ...

  4. CSS学习笔记:定位属性position

    目录 一.定位属性简介 二.各属性值的具体功能 1. relative 2. absolute 3. fixed 三.三种定位属性的效果总结 参考资料:https://www.bilibili.com ...

  5. Mysql教程:(六)修改语句、、删除语句、字符查询like

    1.修改语句 update 表名 set  where 条件 mysql> update student set birth=1988,department='中文系' where id=901 ...

  6. python3+Robotframework+ride+Selenium2Library+Autoitlibrary环境搭建

    1.安装python3.8 第一步是安装Python:https://www.python.org/,RF框架是基于python 的,所以一定要有python环境.将python-3.8.2-amd6 ...

  7. C++ STL的一些应用

    STL一些应用 记录一些STL算法在开发中用得比较舒服的情况(不断添加...) lower_bound(begin,end,val)算法 算法说明 查找>=val的第一个元素,如果没有,返回en ...

  8. SqlServer修改某个字段的默认值时的操作步骤

    sqlserver有时候需要修改一个字段的默认值,却发现修改(update)不了,也删除(delete)不了,排查发现,需要先删除原有的默认值约束,才行:步骤如下1.2.3.若原来这个字段就没有默认值 ...

  9. celery kill task

    from celery.task.control import revokerevoke(task_id, terminate=True) https://stackoverflow.com/ques ...

  10. 解决SpringBoot项目部署到服务器后访问Tomcat后404,无法访问Controller