路径上的SQLAlchemy筛选器具有混合属性

时间:2019-09-01 18:06:27

标签: python orm sqlalchemy pathlib

我正在使用sqlalchemy ORM,该ORM包含用于指定磁盘上本地数据的文件路径的功能。以下是一个玩具示例:

from pathlib import Path

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.hybrid import hybrid_property

_base = declarative_base()


class MyTable(_base):
    __tablename__ = 'mytable'

    id = Column(types.String, primary_key=True)
    some_text = Column(types.String, nullable=False)

    def build_file_path(self):
        base_dir = Path('some_directory/')
        return (base_dir / some_text).with_suffix('.csv')

我希望能够根据build_file_path返回的文件路径是否存在对表的查询进行过滤。我通过指定混合属性来做到这一点:

    @hybrid_property
    def file_exists(self):
        # Return whether the image path relating to a submission exists
        return self.build_image_path().exists()

不幸的是,如果不单独指定表达式逻辑,就无法过滤对file_exists属性的查询。我以为我可以复制并粘贴以下相同的逻辑,但这没用:

    @file_exists.expression
    def radius(self):
        # The following doesn't work:
        return self.build_image_path().exists()

有人知道如何定义表达式逻辑来检查文件路径是否存在吗?我需要动态创建文件路径(base_dir可能会更改),因此不能在db中包括文件路径。

0 个答案:

没有答案