SQLAlchemy主键分配

时间:2013-09-11 07:49:11

标签: python sqlalchemy

我想知道在创建对象和将它们存储在数据库中的哪个位置,主键由SQLAlchemy分配。在我的应用程序中,当发生某些事情时,我会为“发生”创建一个事件,然后为需要了解该事件的每个用户创建一个通知。这一切都发生在同一种方法中。

现在的问题是Notification引用了Event。我应该连接两次到数据库来实现吗?首先存储事件,以便为其分配主键,然后存储通知? 是否可以只连接一次数据库?

所以这些步骤应该发生:

  1. 用户做某事
  2. 创建活动
  3. 是否必要?将事件存储在数据库中,以便获取引用的主键
  4. 创建引用事件的通知
  5. 存储通知

1 个答案:

答案 0 :(得分:2)

您无需担心创建Notification的主键只需将Event对象传递给Notificationcommit。你很高兴。

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()