0
我正在使用sqlalchemy存储文件路径。目前这些存储为绝对路径,但我需要将它们存储为相对路径。不过,我不希望每次需要时都要用基本目录手动加入路径,而应该在它们映射到对象之前自动完成。通过这种方式,无论何时查询数据库,我都会返回一个绝对路径,即使它们是相对存储的。我将如何做到这一点? Mapper配置?在将属性映射到SQLAlchemy中的对象之前编辑属性
我正在使用sqlalchemy存储文件路径。目前这些存储为绝对路径,但我需要将它们存储为相对路径。不过,我不希望每次需要时都要用基本目录手动加入路径,而应该在它们映射到对象之前自动完成。通过这种方式,无论何时查询数据库,我都会返回一个绝对路径,即使它们是相对存储的。我将如何做到这一点? Mapper配置?在将属性映射到SQLAlchemy中的对象之前编辑属性
可能的解决方案之一 - 将方法添加到将相对路径转换为绝对路径的映射类中。此方法需要知道根目录路径 - 可以由全局范围变量定义。
global_base_path = "/home/user"
...
class Path(Base):
...
relative_path = Column(String(2048))
...
@property
def absolute_path(self):
return os.path.join(global_base_path,self.relative_path)
q = session.query(Path)
c = q.first()
print c.absolute_path
正是我在找什么。 –
我有一个问题,让这个工作。按照您的建议使用属性可以正常工作,直到我试图在查询中使用它。 AFAIK要做到这一点我需要混合属性,对吧?但我在解决问题方面遇到了问题。我所做的所有替换@property与@hybrid_property,当我尝试查询时,我得到这个错误“TypeError:该子句的布尔值未定义” –
我可能有一些想法如何处理这个新问题。请发布您的最新模型和查询代码,你有问题。你可以在[stackoverflow.com](http://stackoverflow.com/questions/tagged/sqlalchemy)上创建新的问题 - 或者使用[gist](https://gist.github.com/)。 – vvladymyrov