我有一个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。在他们引用彼此的ID之前,文章和修订版都不能提交到数据库。
我的问题是这是否是理智的事情。如果有很多人同时创建文章,那么flush()调用中分配的ID是否会变为未同步?这可以作为“交易”吗?
答案 0 :(得分:4)
不要在代码中使用ID,而是使用SQLAlchemy的relationship system。
article = Article(...)
revision = Revision(article, ...)
article.current_revision = revision
session.add(article)
session.commit()