Pony ORM - Почему я получаю ошибку подтверждения при использовании команды exist?
У меня относительно сложная структура, и я пытался получить минимальный рабочий пример, который ломается, но я не смог.
Вот примерно такая структура моей таблицы:
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_
не имеет записи, которая является None.
Тогда в строке 4591, если old_dbval = get_dbval(attr, NOT_LOADED)
По умолчанию old_dbval равен NOT_LOADED, что приводит к тому, что атрибут не удаляется.
Это приводит к входу в if statement
цикл в строке 4616 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 ответ
Это больше похоже на ответ на вопрос, а не на вопрос. Это была ошибка в Пони. Мы исправили это здесь. Спасибо за сообщение.