1

私は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ます。Notefid

しかし、どうすればノートの作成をよりエレガントにできるのだろうかと思っています。具体的には、次のようなことを実行してNote(note=note_text,file=File(...))、SQLAlchemyに新しいエントリの挿入を処理してもらいたいと思いfilesます。同様に、既存のについては、に孤立したエントリがない状態で、すべてNoteを実行できるようにしたい、n.file = File(...)またはn.file = Noneすべてを機能させたいと考えていますfiles

4

1 に答える 1

1

SQLAlchemyは、すべてのオブジェクトNoteFileオブジェクトをデータベースセッションに保持し、の間に外部キーを適切に割り当てますSession.flush。を正しく定義する以外に必要なことは何もありませrelationshipん(これは、私が見ることができるように、すでに行っています)。

于 2012-07-16T08:41:30.787 に答える