Настой-Sqlalchemy спасение детей один ко многим проблема - PullRequest
0 голосов
/ 27 декабря 2018

Я очень запутался и пытаюсь добавить детей в существующий родительский объект в базе данных.При попытке сделать это я получаю сообщение об ошибке.

Я не уверен, как обеспечить сохранение моего недавно добавленного дочернего объекта?Ошибка и мои попытки приведены ниже:

equityLinkedNote = db.session.query(EquityLinkedNote).filter(EquityLinkedNote.cmdb == cmdb_eln.cmdb)
underlier_list = underliers.to_dict(orient="records")
    equityLinkedNote.Underlier =\
                [UnderlierDetails(
                Ticker=underlier["Ticker"] if "Ticker" in underlier else None,
                Weight=underlier["Weight"] if "Weight" in underlier else None,
                ReturnFloor=underlier["ReturnFloor"] if "ReturnFloor" in underlier else None,
                InitialFixing=underlier["InitialFixing"] if "InitialFixing" in underlier else None,
                ReturnCap=underlier["ReturnCap"] if "ReturnCap" in underlier else None,
                EffectiveDate=underlier["EffectiveDate"] if "EffectiveDate" in underlier else cmdb_eln.trade_date
                ) for underlier in underlier_list]
    db.session.flush()
    db.session.commit()

ОШИБКА

File "....\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 747, in _declarative_constructor
    setattr(self, k, kwargs[k])
  File "...\site-packages\sqlalchemy\orm\attributes.py", line 229, in __set__
    instance_dict(instance), value, None)
  File "...\site-packages\sqlalchemy\orm\attributes.py", line 711, in set
    state._modified_event(dict_, self, old)
AttributeError: 'NoneType' object has no attribute '_modified_event'

Я понятия не имею, почему это не удается.любая помощь будет оценена!

Вот мои модели

class EquityLinkedNote(GenericSecMasterObject):
    Underlier = db.relationship("UnderlierDetails", backref='note', cascade="save-update, merge, delete", lazy='dynamic',
                                collection_class=list)

Underlier

class UnderlierDetails(db.Model):
    __tablename__ = "underlier_details"
    id = db.Column(db.Integer, primary_key=True)
    Ticker = db.Column(db.String(50), nullable=False)
    InitialFixing = db.Column(db.Float, nullable=True)  
    ReturnCap = db.Column(db.Float, nullable=True)  
    ReturnFloor = db.Column(db.Float, nullable=True)  
    Weight = db.Column(db.Float, nullable=True)
    EffectiveDate = db.Column(db.DateTime, nullable=False)
    cmdb = db.Column(db.String(20), db.ForeignKey('sec_master_details.cmdb'), nullable=False)

1 Ответ

0 голосов
/ 27 декабря 2018

Я понял свою ошибку, для тех, у кого есть проблема с similair, воздерживаться от использования следующего в db.Model, удалил ее, и ошибка была устранена ...

def __getattr__(self, item):
    return None
...