代码之家  ›  专栏  ›  技术社区  ›  Tom

如何批量分配SA ORM对象属性?

  •  1
  • Tom  · 技术社区  · 17 年前

    我有一个ORM映射对象,我想更新它。我在字典中验证并保护了所有属性(关键字参数)。现在,我想更新字典中的所有对象属性。

    for k,v in kw.items():
        setattr(myobject, k, v)
    

    不起作用(AttributeError异常),从SQLAlchemy抛出。

    myobject.attr1 = kw['attr1']
    myobject.attr2 = kw['attr2']
    myobject.attr3 = kw['attr3']
    

    我怎样才能做到这一点?SQLAlchemy已经在它们的构造函数(myobject=MyClass(**kw))中做了类似于我想做的事情,但我在其中所有元编程混淆的垃圾中都找不到。

    SA错误:

    <<          if self.trackparent:
                       if value is not None:
                           self.sethasparent(instance_state(value), True)
                       if previous is not value and previous is not None:
                           self.sethasparent(instance_state(previous), False)
    >>  self.sethasparent(instance_state(value), True)
    AttributeError: 'unicode' object has no attribute '_sa_instance_state'
    
    2 回复  |  直到 17 年前
        1
  •  3
  •   SilentGhost    17 年前
    myobject.__dict__.update(**kw)
    
        2
  •  3
  •   Ants Aasma    17 年前

     class ClassA(Base):
         ...
         b_id = Column(None, ForeignKey('b.id'))
         b = relation(ClassB)
    

    你正试图做到:

     my_object = ClassA()
     my_object.b = "foo"
    

     my_object.b_id = "foo"
     # or
     my_object.b = session.query(ClassB).get("foo")