2013-01-23 48 views
0

我正在使用sqlalchemy存储文件路径。目前这些存储为绝对路径,但我需要将它们存储为相对路径。不过,我不希望每次需要时都要用基本目录手动加入路径,而应该在它们映射到对象之前自动完成。通过这种方式,无论何时查询数据库,我都会返回一个绝对路径,即使它们是相对存储的。我将如何做到这一点? Mapper配置?在将属性映射到SQLAlchemy中的对象之前编辑属性

回答

3

可能的解决方案之一 - 将方法添加到将相对路径转换为绝对路径的映射类中。此方法需要知道根目录路径 - 可以由全局范围变量定义。

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 
+0

正是我在找什么。 –

+0

我有一个问题,让这个工作。按照您的建议使用属性可以正常工作,直到我试图在查询中使用它。 AFAIK要做到这一点我需要混合属性,对吧?但我在解决问题方面遇到了问题。我所做的所有替换@property与@hybrid_property,当我尝试查询时,我得到这个错误“TypeError:该子句的布尔值未定义” –

+0

我可能有一些想法如何处理这个新问题。请发布您的最新模型和查询代码,你有问题。你可以在[stackoverflow.com](http://stackoverflow.com/questions/tagged/sqlalchemy)上创建新的问题 - 或者使用[gist](https://gist.github.com/)。 – vvladymyrov

相关问题