0

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

我的表结构大致如下:

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

在表 2 中,当我有等效的代码时composite_key(height, length),代码工作正常。但是,当我compmosite_key(height, length, table1)执行存在语句时,它会返回一个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,这会导致不删除属性。

这导致进入第if statement4616 行的循环if any(attr in avdict for attr in attrs)

并在cache.db_update_composite_index(obj, attrs, prev_vals, new_vals)因为prev_vals == new_vals

4

1 回答 1

1

这更像是问题回复,而不是问题答案。这是 Pony 中的错误。我们已经在这里修复了 感谢您的报告。

于 2018-11-06T13:13:26.217 回答