Django DB设计快速的全球文字

时间:2010-09-11 05:48:18

标签: python django database-design glob

我需要快速查找我在Django中编写的Web应用程序的单词。我想把这个单词的每个字符放在一个自己的整数字段中,按位置索引。

class Word(models.Model):
    word = models.CharField(max_length=5)
    length = models.IntegerField()

    c0 = models.IntegerField(blank=True, null=True)
    c1 = models.IntegerField(blank=True, null=True)
    c2 = models.IntegerField(blank=True, null=True)
    c3 = models.IntegerField(blank=True, null=True)
    c4 = models.IntegerField(blank=True, null=True)

    mapping = [c0, c1, c2, c3, c4,]

    def save(self):
        self.length = len(self.word)
        for (idx, char) in enumerate(self.word):
            self.mapping[idx] = ord(char)
        models.Model.save(self)

然后我可以像Word.objects.filter(length=4, mapping[2]=ord('A'))这样的查询来查找长度为4的所有在第三个位置都有A的单词。

我不太确定设计和一些机制,所以我想在我去尝试实现之前我会在这里寻求建议。我不完全确定查询的语法。

所以,我想问题是

  1. 您对设计有什么建议吗?
  2. mapping[2]会工作吗?
  3. 我是否可以将字典传递给过滤器命令,以便我可以拥有可变数量的关键字参数?
  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

  

映射[2]会起作用吗?

不,它不会。

  

我是否可以将字典传递给过滤器命令,以便我可以拥有可变数量的关键字参数?

当然可以。例如:

conditions = dict(word__startswith = 'A', length = 5)
Word.objects.filter(**conditions)

会找到以Word开头的所有A个实例,并且长度为五个字符。

  

您对设计有什么建议吗?

这对我来说就像一个过早优化的情况。我怀疑对于中等数量的数据,你应该能够将合适的数据库函数与Django的过滤器结合起来,以获得你需要的东西。

例如:

  

找到长度为4的所有单词,其中A位于第三位。

您可以将Django过滤器与(Postgresql)strpos结合使用。

contains, position = 'A', 3
where = ["strpos(word, '%s') = %s" % (contains, position)]
Word.objects.filter(length = 4, word__contains = contains).extra(where = where)