Скорость Flask-SqlAlchemy-Python getattr()

У меня есть объект MyModel, который наследуется от Model от SQLAlchemy. Доступ к первичному ключу (ID) занимает гораздо больше времени, чем к любому другому атрибуту:

value = getattr(model, ID)

требуется ~ 1,4 мс, чтобы вычислить или получить значение но,

value = getattr(model, <any_other_column>)

занимает экспоненциально меньше времени, чтобы получить значение этого столбца, независимо от того, какого типа он может быть? Есть ли более быстрый способ получить значение первичного ключа из объекта модели?


person David Redding    schedule 08.04.2015    source источник


Ответы (1)


Включите отладку SQLAlchemy и посмотрите, какие SQL-запросы выполняются. Я предполагаю, что у вас есть объект, срок действия которого истек в соответствии с SQLAlchemy, и когда вы пытаетесь получить первый атрибут, он должен прочитать данные из базы данных. Когда вы сделаете то же самое снова (для любого атрибута), это должно снова быть быстрым. Такая ситуация обычно возникает, если вы извлекаете некоторые объекты из базы данных, фиксируете сеанс, а затем снова пытаетесь использовать ранее извлеченные объекты. Это происходит потому, что при фиксации SQLAlchemy не знает, не изменили ли данные другие транзакции, поэтому он должен получить их снова.

person Lukáš Lalinský    schedule 08.04.2015
comment
Ваше предположение было правильным! Если бы я сначала попытался получить attr() из другого поля, а затем из Id, первый attr занял бы больше времени, чем другой. Спасибо за помощь! - person David Redding; 10.04.2015