SQLAlchemy过滤文件夹文件类型层次结构中的文件

时间:2015-09-30 13:03:17

标签: python sqlalchemy hierarchical-data

我已经看到了一些可以解决这个问题的纯SQL查询,但我的SQL并不是真正的重点,所以我们会理解SQLAlchemy解决方案。我也使用sqlite。

我在SQLAlchemy中有一个类似于普通文件系统的层次结构类型结构 - 最后有叶子的嵌套节点。我有一个只使用Python查找文件的解决方案,但它很慢,所以我希望有更快的方法。

文件夹定义如下:

class folder(Base):
    __tablename__ = 'folder'
    id = Column(Integer, primary_key=True)
    parentid = Column(Integer, ForeignKey('folder.id', ondelete='CASCADE'),index=True)
    type = Column(Text(50))

    children = relationship('folder',
                            cascade='all',
                            backref=backref('parent', remote_side='folder.id'),
                        )

    __mapper_args__ = {
        'polymorphic_identity': 'folder',
        'polymorphic_on': type
    }

    def getFiles(self):
        """ returns a list of the files in this folder
        """
        flist = []
        for child in self.children:
            flist += child.getFiles()
        return flist

文件:

class file(folder):
    __tablename__ = 'file'
    id = Column(Integer, ForeignKey('folder.id', ondelete='CASCADE'), primary_key=True)
    name = Column(Text(50))

    __mapper_args__ = {
        'polymorphic_identity': 'file',
        'inherit_condition': (id == folder.id),
    }

    def getFiles(self):
        """ return self as the only file
        """
        return [self]

目前我按文件名查找文件如下:

files = some_folder.getFiles()
return [f for f in files if file_name in f.name.lower()]

有没有更好的方法来查询文件夹中的文件?

1 个答案:

答案 0 :(得分:0)

我无法按照我想要的方式构建查询,但是在我周围找到了一个更快的解决方案。我没有找到所有文件然后搜索,而是遍历每个文件夹并查询其中的文件。它带来了相当大的性能提升。

<div class="title"><h1>{{ article.title }}</h1></div>
<div class="meta" style="font-size:11px;"><strong>{{ article.meta }}</strong>, <strong>Comments :</strong> {{ article.comments }}</div>
<div class="content">
    <p>{{ article.content }}</p>
</div>