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() 的原因是我可以获得文章和修订的 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 回答