我有一个 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 变得不同步?这可以作为“交易”接受吗?