关于django的坑(一)
关于django orm 的坑:
- 关于设置数据库表自动更新
django的orm关于更新数据库的方法有update和save两种方法。想要表中自动更新需要一下几个条件:
- 使用 DateTimeField 设置 auto_now_add 与 auto_now属性为True
- 使用orm 模型的save方法,而不是update
update 更新回直接调用 sql(所以update比save快),而不会通过orm的model层,但 auto_now_add 与 auto_now 为 orm 层mode配置,不是数据库属性,所以造成update不会更新相应的时间段
2. django 使用orm创建表数据,通过id执行相应celery任务,出现db记录不存在
- 常用的解决办法:
ORM属于事物操作,在执行save方法之后,直接触发一步celery任务,数据记录没有存在需要对任务执行设置 countdown 延时执行,比如2s
- 网上很多通过django模型信号 post_save(模型执行save后调用方法):
from django.db import models
@receiver(post_save, sender=AppTask)
def post_save_db_task(sender, **kwargs):
obj = kwargs['instance']
logger.info(f"{AppTask}任务创建成功,开始执行")
celery_cb = obj.celery_task_cb
print('callable(celery_cb) :', callable(celery_cb) )
# callable(celery_cb) and celery_cb(obj) # model新增操作
if kwargs['created']: # 参数里的created判断是新增还是更新模型
pass
else:
pass
post_save 数据django数据库ORM模型,在执行save保存后的后续操作,不属于事物,不属于数据库,仅为save之后执行的调用(y),与直接使用save为同样效果。确认是不可行
# 位于django.db.models.base 663-791 行
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
""" 忽略 """
self.save_base(using=using, force_insert=force_insert,
force_update=force_update, update_fields=update_fields)
save.alters_data = True def save_base(self, raw=False, force_insert=False,
force_update=False, using=None, update_fields=None):
""""""
# Signal that the save is complete
if not meta.auto_created:
post_save.send(
sender=origin, instance=self, created=(not updated),
update_fields=update_fields, raw=raw, using=using,
)
- 确认可行的:通过事物操作
1 from django.db import transaction
2
3 class ApiUserScan(View):
4 @classmethod
5 def post(cls, request: WSGIRequest):
6 # 添加扫描操作
7 with transaction.atomic():
8 """ 创建更新等操作 """
9 transaction.on_commit(lambda: print("over"))
10 return Resp.success(message="")创建事务,同时使用 transaction.on_commit(lambda: print("over"))手动提交,on_commit 作为提交保存到数据库后的回调,执行相应的操作,比如出发执行celery 异步任务,可确保新加入的数据已存在于数据库
关于django的坑(一)的更多相关文章
- 跨过Django的坑
在最近的Django的学习中,慢慢的开始踩坑,开此栏,专为收纳Django的坑,在以后的学习中以便警示.(使用工具为pycharm专业版2018.2.4,python3.5.2,Django版本2.1 ...
- 我踩过的Django的坑
把自己在使用Django过程中吃过的亏 踩过的坑 记录一下 1. unique_together传的是元组 正确:unique_together = (('app_id', 'module_id', ...
- install django采坑
1. install python 3 2. install pip 3. install virtual enviroment : python -m venv myvenv 4. 切换到virt ...
- Django的坑
静态地址:我还没有向服务器部署,这只是临时方案 编辑项目setting.py,(main/setting.py)最下面一部分# Static files (CSS, JavaScript, Image ...
- django踩坑
django输入localhost或者127.0.0.1可以进入,输入自己ip报错 结局方案: 首先找到自己的项目的setting.py文件 找到——> ALLOWED_HOSTS = [] 修 ...
- Windows+Apache+Python+Django 踩坑记录
摘要 使用Python进行Web项目开发:相对于主流三大Web端解决方案(Java/.NET/PHP) Python在某些方面具有一定的优势,相对 Java/.NET 有更轻量级的部署方案,相对PHP ...
- 【Django入坑之路】Models操作
1:字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...
- 【Django入坑之路】admin组件
1:settings.py 中的 INSTALLED_APPS # Application definition INSTALLED_APPS = [ 'django.contrib.admin', ...
- 【Django入坑之路】基础操作(过滤,继承,跳转)
1:自定过滤器 1创建templatetags文件夹 2在里面创建自定义py文件:固定格式: from django import template from django.utils.safestr ...
随机推荐
- Qt实现客户端与服务器消息发送与文件传输
Qt实现客户端与服务器消息发送与文件传输需要使用到 QTcpSocket:提供套接字QTcpServer:提供基于TCP的服务端,官方文档的解释如下: This class makes it poss ...
- markdown详细
在写博客时,想设置字体 颜色参照[(https://blog.csdn.net/wo919191/article/details/84249531)] 图片参照 背景色: gray
- 20200311_最新爬取mzitu
废话不多, 直接上代码, python3.6: import requests from bs4 import BeautifulSoup import os import time; import ...
- python3 通过 pybind11 使用Eigen加速代码
python是很容易上手的编程语言,但是有些时候使用python编写的程序并不能保证其运行速度(例如:while 和 for),这个时候我们就需要借助c++等为我们的代码提速.下面是我使用pybind ...
- 第12.5节 Python time模块导览
一.时间相关的概念 time模块模块提供了各种时间相关的函数,在介绍时间相关功能前,先介绍一些术语和惯例: epoch 是时间开始的点,并且取决于平台.对于Unix, epoch 是1970年1月1日 ...
- PyQt(Python+Qt)学习随笔:QAbstractItemView的defaultDropAction属性
老猿Python博文目录 老猿Python博客地址# 一.概述 defaultDropAction属性用于控制QAbstractItemView及其子类的实例视图中拖放时放下的默认操作.该属性的类型为 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的enabled属性
enabled属性非常简单,最开始老猿没准备介绍该属性的,因为大家都应该知道,但仔细看了看官网文章,觉得还是有些细节可能很少有人注意到,因此还是在此介绍一下. enabled属性用于表示部件是否可用, ...
- 利用神经网络算法的C#手写数字识别(二)
利用神经网络算法的C#手写数字识别(二) 本篇主要内容: 让项目编译通过,并能打开图片进行识别. 1. 从上一篇<利用神经网络算法的C#手写数字识别>中的源码地址下载源码与资源, ...
- Panda 交易所视点观察!区块链金融应用迎新规,哪些版块受影响?
Panda交易所获悉,近日央行下发推动<区块链技术规范应用的通知>(以下简称"通知")及<区块链技术金融应用评估规则>(以下简称"规则" ...
- 汉化gitlab
一.,基于 Larry Li 版汉化指南 修改 (以9-0-stable-zh分支为例) 源码安装汉化 推荐按照 gitlab-ce 源代码中 doc/install/installation.md ...