Pony ORM - 为什么在使用 exists 命令时会出现断言错误?

Pony ORM - Why do I get an assertion error when using the exists command?

我有一个相对复杂的结构,我一直在尝试获得一个最小的工作示例,但我一直没能做到。

我的 table 结构大致如下:

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) 然后在执行 exists 语句时,这个 returns 一个 AssertionError.

我查看了一些源代码并找到了以下几行中的一些问题:

我的版本是 0.7.6,安装时 pip install pony

ln 1875: assert prev_vals != new_vals 在函数中 db_update_composite_index

这开始是因为在第 4151 行: obj = cache_index.get(pkval)拉错了(?).

obj._dbvals_ 没有 None.

条目

然后在第 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

这更像是问题回复,而不是问题回答。这是小马的错误。 我们已修复它 here 感谢报告。