1

ユーザーが記事を作成および編集できるWebアプリケーションがあります。記事を編集するたびに、新しいリビジョンが作成されます。私はSQLAlchemyをORMとして使用しています。

さて、私が記事を作成するたびに、これが起こります:

  # Create the article
  article = Article(...)
  session.add(article)
  session.flush()

  # Create the revision
  revision = Revision(article.id, ...)
  session.add(revision)
  session.flush()

  # Set article's `current_revision_id` field to the revision's id
  article.current_revision_id = revision.id

  session.commit()

毎回flush()を呼び出さなければならない理由は、ArticleとRevisionのIDを取得できるようにするためです。ArticleとRevisionは、互いのIDを参照するまで、データベースにコミットできません。

私の質問は、これが正しいことであるかどうかです。多くの人が同時に記事を作成している場合、flush()呼び出しから割り当てられたIDが同期されなくなる可能性はありますか?これは「トランザクション」として受け入れられますか?

4

1 に答える 1

4

コードでIDを使用する代わりに、SQLAlchemyのリレーションシップシステムを使用してください。

article = Article(...)
revision = Revision(article, ...)
article.current_revision = revision
session.add(article)
session.commit()
于 2012-05-06T19:25:14.980 に答える