1

我最近正在用 Django 建立一个化合物数据库。我在处理模型遍历时遇到了麻烦。以下是我的问题:

楷模:

class CompoundStructures(models.Model):
    molregno           = models.CharField(max_length=27L, primary_key=True)
    molfile            = models.TextField(blank=True)
    standard_inchi     = models.TextField(blank=True)
    standard_inchi_key = models.CharField(max_length=27L, unique=True)
    canonical_smiles   = models.TextField(blank=True)
    molformula         = models.CharField(max_length=100L, blank=True)

    class Meta:
        db_table = 'compound_structures'

    def __unicode__(self):
        return self.molformula

该模型的数据库中有 1,000,000 多条记录:我运行如下代码:

all_mols = CompoundStructures.objects.all()

mol_0 = all_mols[0]                 //quick
mol_100 = all_mols[100]            //normal
mol_10000 = all_mols[10000]       //slow 
mol_100000 = all_mols[100000]    //really slow!

为什么随着索引号变大它变得越来越慢?这使我无法遍历CompoundStructures.

4

1 回答 1

1

当你在做

mol_100000 = all_mols[100000]

Django 评估 QuerySet 从CompoundStructures.objects.all()

这总是很慢,因为您获取了所有的 mol,现在想要第 100000 个 mol,这是合乎逻辑的。

如果您想从整百万行中获取一 (1) mol,那么.get(id=100000)在使用数据库和 Django 的 ORM 时,这是您唯一的选择。

使用.get()这里并不比你现在尝试做的更昂贵,即。获取所有然后评估 QuerySet。

于 2013-08-14T06:59:59.077 回答