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
感谢报告。
我有一个相对复杂的结构,我一直在尝试获得一个最小的工作示例,但我一直没能做到。
我的 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 感谢报告。