我是否滥用flush()调用?

时间:2012-05-06 19:23:27

标签: python database sqlalchemy

我有一个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是否会变为未同步?这可以作为“交易”吗?

1 个答案:

答案 0 :(得分:4)

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

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