Python 我在滥用flush()调用吗?

Python 我在滥用flush()调用吗?,python,database,sqlalchemy,Python,Database,Sqlalchemy,我有一个web应用程序,用户可以在其中创建和编辑文章。每一篇文章编辑都会创建一个新版本。我正在使用SQLAlchemy作为ORM 现在,每次我写一篇文章,都会发生这样的事情: # Create the article article = Article(...) session.add(article) session.flush() # Create the revision revision = Revision(article.id, ...) session

我有一个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是否会变得不同步?这作为“事务”是否可以接受?

在代码中不使用ID,而是使用SQLAlchemy的

article = Article(...)
revision = Revision(article, ...)
article.current_revision = revision
session.add(article)
session.commit()

不要在代码中使用ID,而是使用SQLAlchemy的

article = Article(...)
revision = Revision(article, ...)
article.current_revision = revision
session.add(article)
session.commit()

这样做给了我一个循环依赖错误。我相信这是因为一篇文章有很多修改。但它的修订也指向了这篇文章,这确实不是一个简单的案例。我想你需要
post\u update=True
current\u revision
relationshipWow中我一直在寻找关于“指向自身/相互依赖行的行”的文档。你的帖子不仅有效,而且帮助我找到了那个页面!!如果您不介意我问,我是否应该像您的示例中那样传递和设置模型对象,而不是ID?再次感谢你的帮助!是的,如果您想将ID用于URL之类的内容,我只会访问ID列。这样做会导致CircularDependencyError。我相信这是因为一篇文章有很多修改。但它的修订也指向了这篇文章,这确实不是一个简单的案例。我想你需要
post\u update=True
current\u revision
relationshipWow中我一直在寻找关于“指向自身/相互依赖行的行”的文档。你的帖子不仅有效,而且帮助我找到了那个页面!!如果您不介意我问,我是否应该像您的示例中那样传递和设置模型对象,而不是ID?再次感谢你的帮助!是的,如果您想将ID用于URL之类的内容,我只会访问ID列。