django之七(模型层ORM相关)

本文详细探讨了Django的ORM模型层,包括常见字段、自定义字段和外键字段的使用。讲解了单表操作、多表查询的各种方法,如双下滑线查询、一对多、多对多关系以及聚合查询。还涉及到了F查询、Q查询的高级用法,事务管理以及数据库查询优化等实用技巧。
摘要由CSDN通过智能技术生成

ORM字段

常见字段

1.CharField(max_length,verbose_name=))
2.AutoField(primary_key)
    BigAutoField(AutoField)
        - bigint自增列,必须填入参数 primary_key=True
3.IntgerField()
	BigInterField()
4.DecimalField(max_digits=位数,decimal_places=小数位数)
5..EmailField() ---> varchar(254)
	由组件进行验证
6.	DateField  # 年月日
	DateTimeField # 年月日时分秒
	两个参数:
		1.auto_now:每次操作数据的时候都会修改时间
		2.auto_now_add:在创建数据的时候自动生成时间,更新时不会有改动
Emailfield # 是指就是varchar类型,是给校验性组件看的
7.BooleanField()
 	参数传入布尔值,数据库存储01
8.TextField() 
	打断文本,没有字符限制
9.FileField()
	upload_to = '目录'
	会自动将文件对象传入到目录之下

自定义字段

class MyCharField(models.Field):
    def __init__(self, *args, **kwargs):
        super(MyCharField, self).__init__( *args, **kwargs)

    def db_type(self, connection):
        return 'int'  # 返回一个类型给数据库,让数据库明确字段的类型
ps:继承传入的参数必须写成变量名等于值的形式:
# django除了给你提供了很多字段类型之外 还支持你自定义字段
class MyCharField(models.Field):
    def __init__(self,max_length,*args,**kwargs):
        self.max_length = max_length
        # 调用父类的init方法
        super().__init__(max_length=max_length,*args,**kwargs)  # 一定要是关键字的形式传入

    def db_type(self, connection):
        """
        返回真正的数据类型及各种约束条件
        :param connection:
        :return:
        """
        return 'char(%s)'%self.max_length

# 自定义字段使用
myfield = MyCharField(max_length=16,null=True)

外键字段

1 ForeignKey
2.OneToOneField
3.ManyToManyField

重要的参数:
	1、unique  唯一
	2、index  添加索引
	3、on_delete 级联删除		

测试环境配置

从manage.py复制前四行代码,手动写两行代码
import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "a.settings")
    import django
    django.setup()

单表操作(增删改查)

import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dy65.settings")
    import django

    django.setup()

    from app01 import models

    # 增
    # 方法一
    models.User.objects.create(name='root', age=18)
    # 方法二
    user_obj = models.User.objects
    user_obj.create(name='wx', age=18)

    # 删
    # 方法一
    models.User.objects.filter(pk=3).delete()  # pk会自动找到主键值所在的列
    # 方法二
    user_obj = models.User.objects.filter(pk=2).first()
    user_obj.delete()

    # 改
    # 方法一
    models.User.objects.filter(pk=1).update(name='wx')
    # 方法二
    user_obj = models.User.objects.filter(pk=1).first()
    user_obj.name = 'root'
    user_obj.save()
    
    # 查
    # 方法一
    models.User.objects.all()  # 所有
    models.User.objects.filter()  # 条件查询

13条模型层操作方法

1.all() 查询所有
2.get() 条件筛选,没有直接报错
		res = models.User.objects.get(pk=1)
3.filter() 条件筛选,不会报错
4.first() 拿到queryset中的第一个
5.last() 拿到queryset中的最后一个
6.values() 指定获取的字段入values('id','name') 列表套字典
	res = models.User.objects.all().values('id','name')
	<QuerySet [{
   'id': 1, 'name': 'root'}, {
   'id': 4, 'name': 'cc'}, {
   'id': 5, 'name': 'cs1c'}, {
   'id': 6, 'name': 'csscc'}, {
   'id': 7, 'name': 'cs'}, {
   'id': 8, 'name': 'dd'}]>

7.values_list() 指定获取的字段 列表套元组
	res =models.User.objects.all()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django框架的模型(models)是用于定义应用程序中的数据模型的一组类。它们以Python类的形式定义,每个类表示一个数据库表,每个属性表示表中的一个字段。模型提供了一个简单的API来执行各种数据库操作,如创建、读取、更新和删除(CRUD)。 在Django中,模型是使用ORM(对象关系映射)来实现的,ORM是一种将数据库表映射到对象的技术。通过ORM,我们可以使用Python代码来创建、查询和操作数据库,而不需要编写SQL语句。 在编写模型时,我们可以指定各种字段类型,如CharField、IntegerField、ForeignKey等,以及各种选项,如null、blank、default等。还可以定义模型方法和属性,以及各种元数据,如排序方式、表名等。 例如,以下是一个简单的模型类定义: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=100) email = models.EmailField() def __str__(self): return self.name ``` 在上面的例子中,我们定义了一个Author类,它表示一个数据库表。这个表有两个字段:name和email,都是CharField和EmailField类型。我们还定义了一个__str__方法,以便在调试时能够轻松地查看对象。 在Django中,我们可以使用以下命令来执行各种数据库操作: - python manage.py makemigrations:创建数据库迁移文件。 - python manage.py migrate:执行数据库迁移操作。 - python manage.py shell:进入Django shell,可以使用Python代码来操作数据库。 总之,Django框架的模型提供了一个方便的方法来定义和操作数据库模型。它简化了我们的开发工作,使我们能够更专注于业务逻辑的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值