Я сохраняю пути к файлам, используя sqlalchemy. На данный момент они хранятся как абсолютные пути, но мне нужно, чтобы они сохранялись как относительные. Однако я не хочу вручную соединять пути с базовым каталогом каждый раз, когда они нужны, вместо этого это следует делать автоматически, прежде чем они будут сопоставлены с объектом. Таким образом, каждый раз, когда я запрашиваю базу данных, я получаю абсолютный путь, даже если они хранятся относительно. Как бы я это сделал? Конфигурация маппера?
Редактирование атрибута перед его сопоставлением с объектом в SQLAlchemy
Ответы (1)
Одно из возможных решений — добавить в сопоставленный класс метод, который будет преобразовывать относительный путь в абсолютный. Этот метод должен знать путь к корневому каталогу, который может быть определен глобальной переменной области видимости.
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
person
vvladymyrov
schedule
23.01.2013
Именно то, что я искал.
- person Ben Davis; 23.01.2013
У меня проблема с тем, чтобы заставить это работать. Использование свойства, как вы предложили, работало нормально, пока я не попытался использовать его в запросе. Насколько я знаю, для этого мне нужно смешать свойства, верно? Но у меня проблемы с тем, чтобы заставить это работать. Все, что я сделал, это заменил @property на @hybrid_property, и когда я пытаюсь выполнить запрос, я получаю эту ошибку
TypeError: Boolean value of this clause is not defined
- person Ben Davis; 24.01.2013
Возможно, у меня есть идея, как справиться с этой новой проблемой. Пожалуйста, опубликуйте свою последнюю модель и код запроса, с которым у вас возникла проблема. Для этого вы можете создать новый вопрос на stackoverflow.com или просто использовать суть.
- person vvladymyrov; 24.01.2013
Я разместил это как новый вопрос. http://stackoverflow.com/questions/14504284/querying-a-hybrid-property-in-sqlalchemy. Спасибо за вашу помощь.
- person Ben Davis; 24.01.2013
Похоже, вы получили ответ до того, как я смог его изучить :) В этом сила задавания вопросов в stackoverflow. Удачи в вашей работе.
- person vvladymyrov; 24.01.2013
Ха-ха, да, я предполагал, что это ты, пока не посмотрел на имя пользователя. Stackoverflow очень помог мне в последнее время. Спасибо, в любом случае.
- person Ben Davis; 24.01.2013