python - 我在滥用 flush() 调用吗?

标签 python database sqlalchemy

我有一个网络应用程序,用户可以在其中创建和编辑文章。每个文章编辑都会创建一个新的修订版。我正在使用 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/

相关文章:

Python Numpy 高维矩阵乘法

database - 监控informix数据库变化

java - 在 Java 中连接到 MySQL 数据库

python - 默认值不适用于 flask-sqlalchemy 中的反射模型

python - 抓取维基百科信息框的一部分

python - 如何获取从5号开始的前9个字符?

database - 无法更改 MS Access 2007 上的数据类型

python - 尝试在 python 测试中模拟 redshift 时出错

python - 如何删除 SQLAlchemy 中的外键约束?

python - Numpy:在给定索引数组的情况下查找具有最小值的数组中元素索引的有效方法