classA:
user = models.CharField(max_length=5)
area = models.ForeignKey('B',on_delete=models.DO_NOTHING)classB:
area = models.CharField(max_length=10)# 添加数据
b = B()
b.area='上海'
b.save()
a = A()
a.user='xiaoming'
a.area = b
a.save()
data.objects.filter(User='陈二狗').delete()# 外键关联的时候,如果删除则不做任何事
user = models.ForeignKey(User,on_delete=models.DO_NOTHING)
5.任务线程数据库连接失效处理(高并发)
在Django使用中可能会报 InterfaceError 的错误,这是由于Django每次都会都会发起新的连接,线程池处理任务时,正常使用的连接不会被关闭,但由于数据库端有最长连接时间的限制(默认是8小时),在超时后会发生InterfaceError 或者 Error(2006, ‘MySQL server has gone away’),在这个线程的代码中我们可以调用 django.db.connection.close() 来进行关闭操作
或者每次请求之前都进行失效连接的关闭处理
from django.db import close_old_connections
# 源码# Register an event to reset transaction state and close connections past# their lifetime.defclose_old_connections(**kwargs):for conn in connections.all():
conn.close_if_unusable_or_obsolete()defcron_task():
close_old_connections()# 执行模型类的查询pass