python - 使用 UPDATE、SET 命令对 PostgreSQL 所做的更改似乎不会持续存在

标签 python postgresql

如果满足条件,我将更新 Postgres 数据库表的行。

假设我有一个表“fruit”,它的两列是“source”“status”

我想将 "status""SOLD" 更新为 "EMPTY",前提是 "source" 来自 "FarmA"

为方便起见,我们假设表格中只有一行,并且目前状态标记为 "SOLD"

我用python写的命令是:

postgres_update_query = "UPDATE fruit SET status = %s WHERE source = %s"
cursor.execute(postgres_update_query, ['EMPTY', 'FarmA']

除了对表所做的更改不是持久性的之外,代码可以正常工作。

当我在关闭连接之前检查是否已进行更改时,我可以看到更改已应用。

但是,如果我重新运行脚本,它会显示更改尚未应用,因此它会再次完全重新运行脚本。

从 PostgreSQL 文档中可以看出 SET 函数:

如果在后来中止的事务中发出 SET(或等效的 SET SESSION),则 SET 命令的效果在事务回滚时消失。 一旦周围事务被提交,效果将持续到 session 结束,除非被另一个 SET 覆盖。

我假设当它说“...稍后中止”时,它意味着关闭数据库连接。

所以我的问题是,如何使更新持久化?

最佳答案

原来我只需要在执行命令后提交

connection.commit()

关于python - 使用 UPDATE、SET 命令对 PostgreSQL 所做的更改似乎不会持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57564543/

相关文章:

sql - 查询列出每个行项目但只列出总计一次

python - pygame音频错误无法识别的音频格式

python - VSCode 折叠文档字符串 Python MacOS

python - 使用 python +/- matplotlib 绘制机器人路径和方向

ruby-on-rails - Rails postgreSQL 重复键

sql - "ordered"sql (postgres) 中的多对多关系?

python - 使用 SQLAlchemy 在 PostgreSQL 中创建函数和触发器

python - 串行端口在重写的 Python 代码中不起作用

python - Selenium 安装 Marionette webdriver

ruby-on-rails - 大整数和自定义验证