Pony ORM - Почему я получаю ошибку подтверждения при использовании команды exist? - PullRequest
0 голосов
/ 05 ноября 2018

У меня относительно сложная структура, и я пытался получить минимальный рабочий пример, который ломается, но я не смог.

Вот примерно такая структура моей таблицы:

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

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, что приводит к тому, что атрибут не будет удален.

Это приводит к вводу цикла 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 Ответ

0 голосов
/ 06 ноября 2018

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

...