Python / SQLAlchemy — отношение нагрузки при обновлении внешнего ключа?

#python #orm #sqlalchemy

#python #orm #sqlalchemy

Вопрос:

У меня есть класс:

 class Chart(Base):
   __tablename__ = 'chart'
   id = C('chart_id', Integer, primary_key=True)
   element_id = C(Integer, ForeignKey('element.element_id'))
   element = relationship(Element)
   name = C(String)

   def __init__(self, name):
      self.name = name
  

Использование довольно распространенное,

 chart = Chart('Some name')
chart.element_id = element_id
  

Но после установки element_id значение chart.element равно None. Есть ли какой-либо способ автоматической загрузки этого отношения для нового объекта перед сбросом / фиксацией?

Ответ №1:

Лучший вариант

 chart = Chart('Some name')
chart.element = element
  

Назначьте прямой объект для корабля отношений. Если вы назначаете element_id , то до тех пор, пока он не очистится, он будет находиться в памяти. Внутренне он запустит запрос SELECT * FROM ELEMENT WHERE ELEMENT.id = element_id , но данные element_id не сохраняются или они будут в памяти.

Поэтому я предлагаю прямое назначение объекта, если вы не хотите сбрасывать.

Надеюсь, это вам поможет.

Комментарии:

1. Спасибо за ответ. Сейчас я использую этот способ. Моя функция получает element_id, и я сам получаю элемент, чтобы установить его в объект диаграммы (сброс выполняется внутренне). Похоже, это единственный способ.