实际开发中遇到的一些问题

Django查询集过大的时候

今天的一个需求是这样子的,对数据库中存的约100w条数据进行翻译,如果直接遍历下面这个qureyser对象,我们的服务器内存就爆炸了,这时可以选择用迭代器:

qs = Tag.objects.all()
        print("这是测试接口!")
        for item in qs.iterator():
        pass

查询的一个小技巧和一个问题

代码
qs = Tag.objects.filter(chinesestag__isnull=True).nocache()

    for item in qs:
        try:
            tag_chinese_name = translate_google_free(item.name, 'zh-CN', 'en')
        except Exception as e:
            print(e)
            return Response("Translate Fail")
模型类
class Tag(BaseModel):
    name = models.CharField(max_length=200)
    typeGroup = models.CharField(max_length=100)
    type = models.CharField(max_length=100, blank=True, null=True)
    permId = models.CharField(max_length=200, blank=True, null=True)

    class Meta:
        ordering = ("-updatedAt",)

class ChinesesTag(BaseModel):
    tag = models.OneToOneField(Tag, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)

第一点:在代码中,可以用__isnull属性来查询在tag表中有而在chinesestag表中还不存在的记录。
第二点:这时我本地数据库的情况是tag表中存在的记录已经全部在chinesestag建立了关联记录,所以这时查询集应该是一个空的。单奇怪的是依然会进入for循环并进行遍历,在我请教完同事以后加上了.nocache()方法,原来是缓存的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值