我有一个网络应用程序,用户可以在其中创建和编辑文章。每个文章编辑都会创建一个新的修订版。我正在使用 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 是否可能变得不同步?这可以作为“交易”接受吗?
最佳答案
不要在代码中使用 ID,而是使用 relationship system SQLAlchemy 的。
article = Article(...)
revision = Revision(article, ...)
article.current_revision = revision
session.add(article)
session.commit()
关于python - 我在滥用 flush() 调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473483/