Как установить отношение SQLAlchemy для доступа к значению поля вместо связанного экземпляра - PullRequest
2 голосов
/ 22 августа 2011

Следующий полностью неполный фрагмент определяет базовые отношения SQLAlchemy с использованием декларативного синтаксиса ...

Base = declarative_base()
class Movie(Base):
    __tablename__ = 'movies'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    director = relationship("People", uselist = False)

class People(Base):
    __tablename__ = 'people'
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable = false)

Чтобы получить доступ к имени директора, это будет что-то вроде:

assert isinstance(movie, Movie) # <-- retrieved with query or whatever
director_name = movie.director.name

Если для удобства я всегда хочу, чтобы отношения director просто давали мне имя директора, а не экземпляр People, как вы это делаете? Например: это должно работать так:

assert isinstance(movie, Movie)
director_name = movie.director  # <-- should get the string directly

Я на 99% уверен, что делал это раньше, но больше не могу найти справочный код или документацию по нему. Я немного схожу с ума, пытаясь найти его. Переполнение стека будет хорошим / постоянным эталоном для ответа.

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Что делать, если вы используете собственность?

class Movie(Base):
    __tablename__ = 'movies'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    _director = relationship("People", uselist = False)

    @property
    def director_name(self):
        return self._director.name
2 голосов
/ 22 августа 2011

Ассоциативный прокси используется для всех видов стилей преобразования «ссылка на объект -> ссылка на атрибут» на стороне Python. Документы были недавно обновлены и переписаны:

http://www.sqlalchemy.org/docs/orm/extensions/associationproxy.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...