Django model ForeignKey 的反向查询优化

背景:

  • A 表 3000 条数据

  • B 表 2000 条数据

  • B表中有个外键是A表的id

需求:

查询出 A表及B表中的字段信息。
例,A表数据

id name comm
1 test1 你好
2 test2 你不好

B表数据

id asset_id name
1 1 b数据1
2 1 b数据2

结果:

name comm b-name
test1 你好 b数据1
test1 你好 b数据2
test2 你不好

我的方案:

django model 模型:

class Adata(models.Model):
    name = models.CharField(u'姓名', max_length=10 )
    comm = models.TextField()
    
class Bdata(models.Model):
    asset = models.ForeignKey('Adata', db_index=True)
    name= models.CharField(u'姓名', max_length=10 )
    

逻辑:

datas = Adata.objects.select_related().all()
datalist = []
for data in datas:
    row = []
    row.append( data.name )
    row.append( data.comm )
    for test in data.bdata_set.all():
        subrow = row
        subrow.append( test.name)
        datalist.append( subrow )
        

A 表和 B 表在 3000左右条数据的时候,大约需要4秒左右的时间。求如何优化,求指点。
Thx

阅读 9.5k
1 个回答

我换了个思路,从B表入手。通过双下划线关联A表的字段数据。这样既能得到想要的记录条数,又能得到A表的字段数据。

逻辑:

datas = Bdata.objects.select_related().all().values_list('asset__name','asset__comm','name')

总结:

有时候,遇到问题不要一成不变。换个入口思路,也行便会有意想不到的惊喜。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题