2012-07-15 96 views
1

我有一个File类:SQLAlchemy的一到一对一的关系

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

的SQLAlchemy会持续所有NoteFile对象在数据库会话,适当时Session.flush分配外键。除了正确定义relationship之外,没有其他任何事情需要做(正如我所见,您已经完成了)。

+0

我不得不添加'单亲= TRUE'得到这个工作,但除此之外,它是你描述。 – 2012-07-29 15:39:17