首页 > 其他分享 >十六、Django的ORM(二)

十六、Django的ORM(二)

时间:2024-02-11 21:44:30浏览次数:20  
标签:第三张 models 十六 关联 查找 索引 ORM through Django

1、DecimalField

DecimalField保存浮点型数据比FloatField精确,因为它是以字符串来保存,而FloatField,数据越长,保存得越不精确。

2、索引

(命中索引) 正确使用SQL语言,使查找数据时,用到索引

username=models.CharField(
        ...
        # db_index=True  数据库中字段是否可以建立索引   在数据库中数据很大时,建立该索引,可以查找得更快(加速查找)
        # unique= 数据库中字段是否可以建立唯一索引 加速查找 && 限制列值唯一
        # primary_key=  加速查找 && 限制列值唯一 && 不能为空
        # unique_for_date=  数据库中字段【日期】部分是否可以建立唯一索引
        # unique_for_month=  数据库中字段【月】部分是否可以建立唯一索引
        # unique_for_year=  数据库中字段【年】部分是否可以建立唯一索引
    	...
    )

3、一对一

使foreignkey唯一 或使用oneToOneField

4、ForeignKey

a、关联删除

"""
	on_delete = models.CASCADE, 删除关联数据,与之关联也删除
							models.DO_NOTHING,删除关联数据,引发错误IntegrityError
							models.PROTECT,删除关联数据,引发错误ProtectedError
							models.SET_NULL,删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
							models.SET_DEFAULT, 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
							models.SET ,删除关联数据,
								a、与之关联的值设置为指定值,设置:models.SET(值)
								b、与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
"""
related_name='b', # 反向查找时,用obj.b
related_query_name='b', # 反向查找时,用obj.b_set
limit_choices_to={'id__gt':1}, # Admin中关联的部门id要求大于1 (只在Admin中生效)

5、联合唯一

class UserToTag(models.Model):
    u = models.ForeignKey(to='User')
    t = models.ForeignKey(to='Tag')
    ctime=models.DateField()
    ...

    class Meta:
        # 联合唯一 即两条记录中 u和t 不能重复
        unique_together=[
            ('u','t'),
        ]

6、多对多的高级方式

通过through属性 指定第三张表 为自己创建的表
这样,第三张表就可以有不只三列数据
但这时候,.add .set .remove等方法不能使用了 .all .filter 还可以使用
因此,这种通过through属性关联起来的第三张表多对多方式 不推荐。
推荐:普通manyTomany 或 自创建第三张表但不through关联

class Tag(models.Model):
    title = models.CharField(max_length=16)
    # 使用ManyToManyField只能在第三张表中创建三列数据
    m = models.ManyToManyField(
        to='UserInfo',
        through='UserToTag', # 通过through指定第三张表就可以有三列以上的数据
        through_fields=['u','t'] 
    )

7、自关联

(ManyToMany)自关联时,related_name必须设置,方便反向查询

8、extra

9、Using :指定使用的数据库


10、raw

# 执行原生SQL语句
models.UserInfo.objects.raw('select * from userinfo')
# 其它
...

11、dates查询

12、批量创建bulk_create

13、in_bulk

models.UserInfo.objects.in_bulk([1,2,3]) #查询主键为1,2,3的记录

标签:第三张,models,十六,关联,查找,索引,ORM,through,Django
From: https://www.cnblogs.com/zhlforhe/p/18013550

相关文章

  • 十五、Django的ORM
    单表操作1、表记录的添加方式一:Book()+obj.save()b=Book(name="python基础",price=99,author="yuan",pub_date="2017-12-12")b.save()#将b存到数据库方式二:createBook.objects.create(name="linux",price=78,author="HK",pub_date="......
  • 十四、MySQL与Django之Model基础
    数据库Django默认支持sqlite、mysql、oracel、postgresql等数据库1、sqlitedjango默认使用sqlite数据库Django.db.backends.sqlite3DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':os.path.join(BA......
  • 十三、Django Admin
    DjangoAdmin是django项目数据库的一个后台管理工具一、注册models项目中,应用创建之后,应用文件夹就有一个admin.py文件。在admin.py中注册需要在admin后台管理的modelsfromdjango.contribimportadminfromwebimportmodelsadmin.site.register(models.Host)admin.site.......
  • 十二、Django视图函数和模版相关
    视图相关HTTPRequest对象:属性:path函数:get_full_path()HTTPResponse对象:render()render_to_response()locals():局部变量redirect()重定向例子:用户登录成功后跳转deflogin(request):...#判断登录成功后,跳转到indexreturnrender(request,"index.html"......
  • 十、Django静态文件
    django网络相应基础:1、配置url路由在urls.py中urlpatterns添加路径fromdjango.conf.urlsimporturlfromdjango.contribimportadminfromapp01importviewsurlpatterns=[url(r'^admin/',admin.site.urls),url(r'^index.html$',views.index),......
  • 十一、Django url控制系统
    urlpatterns=[url(正则表达式,views视图函数,参数,别名),]匹配1、完全匹配urlpatterns=[url(r'^admin/',admin.site.urls),url(r'^showtime/',views.showtime),url(r'^blog/',include('blog.urls')),url(r'^logi......
  • 九、Django环境搭建(基于anaconda环境)
    Django特点:具有完整的封装,开发者可以高效率的开发项目,Django将大部分的功能进行了封装,开发者只需要调用即可,如此,大大的缩短了开发的时间,同时也因为太多封装导致开发灵活度和项目的运行效率不足。通常在工作中,开发者可以使用Django快速的搭建项目,然后基于项目进行个别部分的效率优......
  • 小白入门clang_format
    如果没时间研究折腾,可以接受这样↓的风格 那么安装这个↓,默认在代码界面按alt+shift+f即可 ========================================================== 如果你想稍微个性化一点在上面的基础上,做以下配置 什么意思自己看上面↑截图的文字介绍 如何回到代码界面按a......
  • Ubuntu服务器使用 Daphne + Nginx + supervisor部署Django项目
    视频:https://www.bilibili.com/video/BV1e6421G7uM/?vd_source=36191bed2c30378060ff2efe6831b331Django从3.0版开始加入对ASGI的支持,使Django开始具有异步功能。截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。所以说,我们也需要适时的......
  • dremio 的InformationSchemaCatalog 服务三
    以前简单写过一些关于dremio的InformationSchemaCatalog,也说过dremio为了方便提供标准的INFORMATION_SCHEMA自己开发了存储扩展,以下是关于存储扩展的创建以及刷新说明创建创建是在CatalogService中处理的,具体的实现是CatalogServiceImpl参考处理if(roles.conta......