1
我有一个Web应用程序,用户可以在其中创建和编辑文章。每篇文章编辑都会创建一个新版本。我使用SQLAlchemy作为ORM。现在我滥用flush()调用吗?
,每次我创建了一篇文章,这是发生了什么:
# 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不成立?这是否可以接受为“交易”?
这样做给了我一个CircularDependencyError。我相信这是因为一篇文章有很多修改。但其修订也回到了文章中。 – trinth
这确实不是一个简单的例子。我认为你需要'current_revision'关系中的'post_update = True' – ThiefMaster
哇我一直在试图找到关于“指向自己/相互依赖的行的行”的文档。不仅你的post_update =真正的评论工作,但它帮助我找到该页面!如果你不介意问我,我是否应该喜欢在你的例子中传递和设置模型对象而不是id?再次感谢你的帮助! – trinth