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

时间:2018-11-05 02:50:02

标签: python caching ponyorm

我有一个相对复杂的结构,并且我一直在尝试获取一个可能中断的最小工作示例,但我一直未能做到。

这大概是我的表结构:

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上出错

1 个答案:

答案 0 :(得分:1)

这更像是问题回复,而不是问题答案。这是小马的虫子。 我们已经修复了here 感谢您的举报。