2015-02-05 2 views
1

Я создаю экземпляр нового объекта SQLAlchemy, который я не собираюсь сохранять в базе данных. Тем не менее, я хотел бы иметь возможность просматривать его свойства отношений после его создания.Доступ к отношения SQLAlchemy перед вставкой

class Alert(Base): 
    __tablename__ = 'alert' 
    alert_id = Column(Integer, primary_key=True) 
    alert_code = Column(CHAR(1), ForeignKey('alert_code_desc.alert_code')) 
    alert_description = relationship('AlertCodeDescription') 

class AlertCodeDescription (Base): 
    __tablename__ = 'alert_code_desc' 
    alert_code = Column(CHAR(1), primary_key=True) 
    alert_description = Column(String) 
new_alert = Alert(**data) 
alert_description = new_alert.alert_description.alert_description #this causes an error 

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

ответ

0

Это очень похожий вопрос на Can I use SQLAlchemy relationships in ORM event callbacks? Always get None, с тем же ответом.

Связь не устанавливается автоматически SQLAlchemy при ручном создании объектов. Если вы хотите получить доступ к alert_description в отзыве события, установите его при создании Alert экземпляра:

ad = AlertCodeDescription(alert_code='A', alert_description='something') 
a1 = Alert(alert_code=ad.alert_code) 
db.session.add(a1) 
db.session.commit() 

assert a1.alert_description is None 

# Here: set the relationship object, instead of the foreign key 
a2 = Alert(alert_description=ad) 
db.session.add(a2) 
db.session.commit() 

assert a2.alert_description == ad 
assert a2.alert_code == ad.alert_code 
+0

я понимаю, что я мог бы сделать это, но мне было интересно, если вы могли бы вызвать загрузку отношения никогда не экономить данные первого объекта. Думаю, это невозможно. –

Смежные вопросы