1

我正在尝试使用 SQLObject 的lazyUpdate 功能,但我的数据被破坏了。这是类定义

class T(sqlobject.SQLObject):
    class sqlmeta:
        lazyUpdate = True
    def __enter__(self):
        return self
    def __exit__(self, type, value, traceback):
        if self.sqlmeta.dirty:
            self.syncUpdate()
        return False
    foo = IntCol()
    bar = IntCol(default=None)

上下文管理器功能是这样我可以写:

with T.select().getOne() as t:
    # update t

当我创建对象时,一切似乎都正常。但是,当我只是读取对象时,具有默认值的字段(bar如上)将被重置为其默认值。

例如,如果我这样做

def get_rows():
    rows = T.select()
    return list(repr(r) for r in rows)

反复我发现我第一次获得正确的数据时,随后的一些或所有行的值被它们的默认值替换。最终,所有行都重置为默认值。没有默认值的字段不会被触及。

如果我注释掉lazyUpdate在类定义中设置的行,它可以正常工作(可能还有更多写入数据库)。如果我注释掉syncUpdate对它的调用仍然失败。将默认值更改为不同的值(如 -1)仍然失败。这不是一些挥之不去的架构设置,因为我已经删除了表并多次重新创建它,因为我一直在尝试解决问题。

FWIW,我正在使用 SQLObject 1.3.1、Python 2.7 和 PostreSQL 9.1。

4

0 回答 0