SQLAlchemy中赋值的时间

时间:2014-05-18 16:46:04

标签: python sqlalchemy

我是SQLAlchemy的新手,如果这是一个非常愚蠢的问题,请道歉。

我按照SQLA网站上的示例设置了一个简单的1对多父/子关系,没有太多麻烦。但是,在构建子节点时,我很难将初始值从父节点传递给子节点。

我怀疑这与父类成员实际分配值的时间有关,但如果有人可以解释'正确'的方法,或者其他一些解决办法,我真的很感激。

我的代码如下

class FoobarDefinition(Base):
    id = Column(Integer, Sequence('my_defn_id_seq'), primary_key=True)
    children = relationship("Foobar", backref="definition")

    start = Column(Integer, default=0)
    thing = Column(String, default="Widget")

    def createFoobar(self):
        foobar = Foobar(self.id, self.thing)
        self.children.append(foobar)
        return foobar

class Foobar(Base):
    id = Column(Integer, Sequence('my_id_seq'), primary_key=True)
    definition_id = Column(Integer, ForeignKey('FOOBAR_DEFINITION.id'))

    states = relationship("FoobarState", backref="Foobar")

    thing = Column(String)

    created = Column(DateTime, default=datetime.now)
    updated = Column(DateTime, default=datetime.now, onupdate=datetime.now)

    def __init__(self, spec_id, thing):
        self.spec_id = spec_id
        self.thing = thing

SQL日志的相关部分如下:

  

2014-05-18 17:27:07,678 INFO sqlalchemy.engine.base.Engine INSERT INTO“FOOBAR_DEFINITION”(start,thing)VALUES(?,?)

     

2014-05-18 17:27:07,679 INFO sqlalchemy.engine.base.Engine(0,'Widget')< --- good

     

2014-05-18 17:27:07,680 INFO sqlalchemy.engine.base.Engine INSERT INTO“FOOBAR”(definition_id,thing,created,updated)VALUES(?,?,?,?)

     

2014-05-18 17:27:07,681 INFO sqlalchemy.engine.base.Engine(1,None,'2014-05-18 17:27:07.680650','2014-05-18 17:27:07.680668 ')< --- bad(2nd arg is None)

这里显示的问题是插入FOOBAR应该将'Widget'作为其第二个值,而不是None。该值从FOOBAR_DEFINITION传播,该插入的正确值为'Widget'。

感谢任何建议!

1 个答案:

答案 0 :(得分:0)

如果FoobarDefinition使用thing列的default值,这只是一个问题,因为实例上的值("Widget")未设置,但{将数据刷新到数据库时插入{1}}。

您可以在新实例初始化期间设置默认值,例如:

only

或只是始终提供此字段的值。