SQLAlchemy一对一关系

时间:2012-07-15 21:18:54

标签: python orm sqlalchemy

我有一个File课程:

class File(DeclarativeBase):
    __tablename__ = 'files'

    id        = Column(Integer, primary_key=True)
    name      = Column(String)
    mime_type = Column(String)
    data      = Column(LargeBinary)

我用它来存储我的应用程序中的附件。我还有Note课程:

class Note(DeclarativeBase):
    __tablename__ = 'notes'

    id   = Column(Integer, primary_key=True)
    note = Column(String)
    fid  = Column(Integer, ForeignKey('files.id'))

    file = relationship('File', uselist=False, cascade="all, delete-orphan")

如果用户未附加文件,fid可以是NULL。除了Note之外,其他类也使用fid列来处理附件。

然而,我想知道如何才能使音符的创作更加优雅。具体来说,我希望能够执行Note(note=note_text,file=File(...))之类的操作,并让SQLAlchemy负责在files中插入新条目。同样,对于现有的Note,我希望能够执行n.file = File(...)n.file = None并让所有内容都适用于files中没有孤立的条目。

1 个答案:

答案 0 :(得分:1)

SQLAlchemy将在数据库会话中保留所有NoteFile个对象,并在Session.flush期间适当地分配外键。除了正确定义relationship之外,您还没有其他任何事情要做(正如我所看到的,您已经完成了)。