Python Django DB设计,用于快速全局字

Python Django DB设计,用于快速全局字,python,django,database-design,glob,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=Tru

我需要快速查找用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(长度=4,映射[2]=ord('A'))
的查询,以查找所有长度为4且第三位有A的单词

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)
我不是很确定设计和一些机制,所以我想在我去尝试实现它之前,我会在这里征求建议。我不能完全确定进行查询的语法

所以,我想问题是

  • 你对设计有什么建议吗
  • 映射[2]
    有效吗
  • 我是否能够将字典传递给filter命令,这样我就可以拥有数量可变的关键字参数
  • 谢谢

    映射[2]有效吗

    不,不会的

    我是否能够将字典传递给filter命令,这样我就可以拥有数量可变的关键字参数

    当然可以。例如:

    conditions = dict(word__startswith = 'A', length = 5)
    Word.objects.filter(**conditions)
    
    将查找所有以
    A
    开头的
    Word
    实例,长度为五个字符

    你对设计有什么建议吗

    我觉得这就像是一个过早优化的案例。我认为对于中等容量的数据,您应该能够将适当的数据库功能与Django的过滤器结合起来,以获得所需的内容

    例如:

    查找所有长度为4且第三位有A的单词

    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)
    
    您可以将Django筛选器与(Postgresql)组合使用


    你能告诉我更多的细节吗,这些词有多少个,为什么你需要快速查找它们,以及查找的速度有多快?我正在优化一个回溯约束满足程序来生成纵横字谜。现在我有大约42000个独特的单词和短语。除了大写字母外,它们被去除了所有内容,并存储在所有大写字母中。我在我的算法上运行了cProfile,现在我花了大部分时间从字典中获取候选词(我目前在一个单词列表上使用fnmatch——在我开始优化之前,快速而肮脏地查看是否正确)。我做得越快越好。谢谢你的回答!我正在处理大约42000个单词(在不久的将来,我计划有更多的单词),对于后端的调用,我需要做大约600到800个部分字典查找。word_uuStartsWith无法工作,因为我需要能够找到像“?”SH??”等模式(我正在生成纵横字谜,我应该这么说——对不起)。我不知道Postgresql的strpos过滤器。这是否适用于sqlite3或nonrel/appengine?再次感谢
    这对sqlite3或nonrel/appengine有效吗?
    :很抱歉,我不知道SQLite或nonrel/appengine是否有与
    strpos
    等效的功能。谢谢!我使用了你的建议,即使用字典指定条件!