2013-09-11 5 views
1

Мне интересно, где в процессе создания объектов и их хранения в базе данных первичный ключ присваивается SQLAlchemy. В моем приложении, когда что-то происходит, я создаю событие для этого «происходящего», а затем создаю уведомление для каждого пользователя, который должен знать об этом событии. Все это происходит по тому же методу.Назначение первичного ключа SQLAlchemy

Проблема в том, что уведомление ссылается на Событие. Должен ли я дважды подключаться к базе данных для достижения этой цели? Сначала сохранить событие, чтобы ему назначался первичный ключ, а во-вторых, чтобы сохранить уведомление? Можно ли только один раз подключиться к базе данных?

Таким образом, эти шаги должны произойти:

  1. Пользователь делает что-то
  2. Создать событие
  3. необходимо? магазин события в базе данных, так что я получаю первичный ключ для ссылки на
  4. Создать уведомление, что ссылки Event
  5. Храните Извещение

ответ

2

Вам не нужно беспокоиться о первичном ключе для создания Notification просто пройдите Event объект Notification и commit. Тебе хорошо идти.

SQLAlchemy не назначает первичный ключ, это база данных, которая обычно и неявно does it для вас, если вы объявили таблицу примерно следующим образом: id = Column(Integer, primary_key = True).

class Event(Base): 
    __tablename__ = "events" 
    id = Column(Integer, primary_key = True) 
    ... 

class Notification(Base): 
    __tablename__ = "notifications" 
    id = Column(Integer, primary_key = True) 
    event_id = Column(Integer, ForeignKey("events.id")) 
    event = relationship("Event") 
    ... 
    def __init__(self, event): 
     self.event = event 


notification = Notification(Event()) 
session.add(notification) 
session.commit() 
+1

Я предполагаю, что это должно быть: event = relationship ("Event")? :) – arnoutaertgeerts

+0

ahh..good catch. Также это должно быть 'event_id = Column (Integer, ForeignKey (" event.id "))'. Исправлено: –

+1

Я думаю, что это должно быть event.id хотя – arnoutaertgeerts

Смежные вопросы