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 ответ

Решение

Это больше похоже на ответ на вопрос, а не на вопрос. Это была ошибка в Пони. Мы исправили это здесь. Спасибо за сообщение.

Другие вопросы по тегам