Скорост на Flask-SqlAlchemy-Python getattr().

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

value = getattr(model, ID)

отнема ~1,4 ms за изчисляване или получаване на стойността на но,

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
Предположението ти беше правилно! Ако опитах да получа getattr() първо от друго поле, след това от Id, първият attr ще отнеме повече време от другия. Благодаря, че ми помогна! - person David Redding; 10.04.2015