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. 使用Egg改造订单系统展示效果,方便快速浏览

    素材准备: 1.Egg.js Born to build better enterprise frameworks and apps with Node.js & Koa 为企业级框架和应用而 ...

  2. linux shell exec 关联文件描述符

    在写shell脚本时,如果多个命令的输入或输出都是同一个文件,而这个文件的路径和名字都很长,则需要书写很多次同样的路径会很浪费时间,我们可以使用exec命令来关联一个自定义的文件描述符到一个特定的文件 ...

  3. ST表 求 RMQ(区间最值)

    RMQ即Range Minimum/Maximun Query,中文意思:查询一个区间的最小值/最大值 比如有这样一个数组:A{3 2 4 5 6 8 1 2 9 7},然后问你若干问题: 数组A下标 ...

  4. Linux&C———进程间通信

    管道和有名管道 消息队列 共享内存 信号 套接字 由于进程之间的并不会像线程那样共享地址空间和数据空间,所以进程之间就必须有自己特有的通信方式,这篇博客主要介绍自己了解到的几种进程之间的通信方式,内容 ...

  5. ES6-字符串-模板字符串(复习+学习)

    昨天学习了字符串对象和字符串的表示,就是利用utf-8等不同的编码方式,还有许多的对象方法,都是处理字符串的方法,挺方便的,今天我学习了一下字符串模板,这里记录i一下学习的笔记,当然,今天学习了部分内 ...

  6. linux删除文件未释放

    https://access.redhat.com/solutions/2316 $ /usr/sbin/lsof | grep deleted ora 25575 data 33u REG 65,6 ...

  7. 在Vs code中使用sftp插件以及连接windows远程sftp协议部署指导(解决vscode的sftp插件中文目录乱码问题)

    一.启动SFtp 二.上手vs code SFTP插件 2.1 初始配置 2.2解决乱码问题 三.SFTP配置 3.1常用配置 3.2示例配置 四.SFTP使用 五.扩展阅读 一.启动SFtp 话说小 ...

  8. Linux基础四:软件包管理

    四.软件包管理器: 1.概念 红帽有两款软件包管理器,分别是rpm和yum. 1.rpm软件包管理器  ->  用来安装单个包  ->  .rpm文件 红帽的安装包文件,都放在Packag ...

  9. Nginx支持WebSocket反向代理

    WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择.其为HTML5的一部分,WebSocket相较于原来开发这类app的 ...

  10. halcon基础算子介绍(窗口创建,算子运行时长,是否启用更新函数)

    前言 halcon有有大约1500个算子,我总结一些简单大家用得到的算子,比如创建窗口的方式有3种,接下来结束这方式,及其异同点等! 1.窗口创建的三种方式 1.1使用dev_open_window算 ...