#python #sqlalchemy
#python #sqlalchemy
Вопрос:
Я использую sqlalchemy уже несколько лет вместо моделей Django. Я обнаружил, что очень удобно иметь пользовательские методы, прикрепленные к этим моделям
т. е.
class Widget(Base):
__tablename__ = 'widgets'
id = Column(Integer, primary_key=True)
name = Column(Unicode(100))
def get_slug(self, max_length=50):
return slugify(self.name)[:max_length]
Есть ли снижение производительности при выполнении таких действий, как session.query(Widget)
если модель содержит несколько десятков сложных методов (50-75 строк)? Загружаются ли они в память для каждой возвращаемой строки, и было бы эффективнее переместить некоторые из этих менее используемых методов во вспомогательные функции и импортировать по мере необходимости?
def some_helper_function(widget):
':param widget: a instance of Widget()'
# do something
Спасибо!
Комментарии:
1. Я не очень хорошо разбираюсь в SA — но обычно ORM используют отложенную оценку
Ответ №1:
У вас не было бы никакого снижения производительности при загрузке объектов из базы данных с помощью SA, используя только a session.query(...)
.
И вам определенно не следует переносить какие-либо методы в какую-либо вспомогательную функцию ради производительности, поскольку при этом вы в основном разрушите объектно-ориентированную парадигму вашей модели.