我有一个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
中没有孤立的条目。
答案 0 :(得分:1)
SQLAlchemy将在数据库会话中保留所有Note
和File
个对象,并在Session.flush
期间适当地分配外键。除了正确定义relationship
之外,您还没有其他任何事情要做(正如我所看到的,您已经完成了)。