我有一个相对复杂的结构,并且我一直在尝试获取一个可能中断的最小工作示例,但我一直未能做到。
这大概是我的表结构:
class Table1(_db.Entity):
name = Required(str)
table2s = Set('Table2')
class Table2(_db.Entity):
height = Required(Decimal)
length = Required(Decimal)
table1 = Optional('Table1')
composite_key(height, length, table1)
with db_session:
Table2(height=2, length=1)
try:
Table2.exists(height=2, length=1) # This will throw an error
except AssertionError:
Table2.exists(height=2, length=1) # This works
在Table2中,当我有一个composite_key(height, length)
时,代码可以正常工作。但是,当我有compmosite_key(height, length, table1)
时,则在执行exist语句时将返回AssertionError
。
我浏览了一些源代码,并在以下几行中找到了一些问题:
我使用的是0.7.6版,并且安装了pip install pony
在1875年:函数assert prev_vals != new_vals
中的db_update_composite_index
这开始是因为在4151行中:
obj = cache_index.get(pkval)
被错误拉出(?)。
obj._dbvals_
没有无条目。
然后在第4591行中,如果old_dbval = get_dbval(attr, NOT_LOADED)
old_dbval默认为NOT_LOADED,则导致不删除属性。
这将导致在第4616行if statement
if any(attr in avdict for attr in attrs)
循环
并由于cache.db_update_composite_index(obj, attrs, prev_vals, new_vals)
prev_vals == new_vals
上出错