我正在尝试使用 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。