
ORM
Django ORM
robch
Stay foolish Stay hungry!
展开
-
Django 之终端打印SQL语句
在开发 Django 项目的时候,我们有时候需要知道 ORM 对应的 SQL 是什么?那么只需要settings.py文件中,像如下一样设置 LOGGING ,即可实现在Django终端打印SQL语句.LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'loggi原创 2020-05-13 17:02:55 · 841 阅读 · 0 评论 -
Django ORM 的批量创建对象
在开发项目的时候,我们有时候需要批量的创建对象:为了描述问题方便,创建下面的 modelclass SQLExecRecordAgg(models.Model): parent_rule = models.ForeignKey(TransRule) trans_row = models.PositiveIntegerField(default=0, help_text=_('the rows affected')) stats_mins = models.DateTimeField原创 2020-05-13 15:40:41 · 1001 阅读 · 0 评论 -
property、getattr 的用法和Django Model 和 dict 的转换
1. 对于可能需要经常访问的对象属性,可以借鉴下面的 getattr 的用法 class TransRule(models.Model): @property def rule_db(self): if not getattr(self, 'rule_dbinfo', None): print '------get the info from the DB------' database = self.src_tab原创 2020-04-30 16:59:29 · 532 阅读 · 0 评论 -
Django 中的逻辑删除or标记删除or软删除
有时候在开发项目中,对某些数据可能只需要逻辑删除,并不真正的从数据库中删除数据。这时候只需要把继承的 Model 从from django.db import models改为 from model_utils.models import SoftDeletableModel 即可,就这么简单!from model_utils.models import SoftDeletableM...原创 2019-11-26 16:10:53 · 1598 阅读 · 4 评论 -
MySQL 模糊搜索 LIKE BINARY 和 LIKE
MySQL 模糊搜索 LIKE 是否区分大小写,取决于表的 COLLATE,默认是不区分大小写的,如果 COLLATE=utf8_bin 即二进制形式就是区分大小写的。在 ORM 中过滤的时候会写 xxx.objects.filter(name__contains=‘sxn’) 和 xxx.objects.filter(name__icontains=‘sxn’) 转成的 SQL分别是: LIKE BINARY 和 LIKE原创 2020-04-01 18:57:31 · 3981 阅读 · 0 评论 -
Django ORM select_related 和 prefetch_related
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能。以例子来说明,两者的用法:from django.db import models class Province(models.Model): name = models.CharField(max_length=10) de...转载 2020-03-09 20:00:03 · 260 阅读 · 0 评论 -
Django ORM 的 update_or_create
Django ORM 的 update_or_create官网的手写版如下:defaults = {'first_name': 'Bob'}try: obj = Person.objects.get(first_name='John', last_name='Lennon') for key, value in defaults.items(): setatt...原创 2019-11-07 22:42:01 · 947 阅读 · 0 评论