psycopg2 更新查询破坏了我的 PostgreSQL table
psycopg2 Update Query broke up my PostgreSQL table
当我 运行 这个 UPDATE 查询时,它破坏了我的 PostgreSQL table messages
。我不再能够更新行或 table,因此不得不创建一个新的 table 并删除旧的。
cursor.execute('''
SELECT
outbounds.messages.oubd_msg_pvt_uuid,
outbounds.messages.oubd_ord_pvt_uuid,
outbounds.messages.oubd_cont_pvt_uuid,
outbounds.messages.oudb_sndr_pvt_uuid,
outbounds.messages.end_phn_pvt_uuid,
outbounds.messages.status
FROM outbounds.messages
WHERE outbounds.messages.status = false
''')
records = cursor.fetchall()
for row in records:
print(row['sender'], ' -> ', row['number'], ' = ', row['content'])
cursor.execute('UPDATE outbounds.messages SET status=true WHERE oubd_msg_pvt_uuid = %s', (row['oubd_msg_pvt_uuid'],))
print(cursor.rowcount, "Record Updated successfully ")
虽然它说它已更新,但实际上该行并未更新。
我是 Python 的新手所以现在确定我做错了什么?
您好像忘记提交交易了。
如果您在关系数据库中启动一个事务,则在您结束该事务之前,所有数据修改都不会持久。
结束交易有两种方式:
COMMIT
使更改持久化
ROLLBACK
撤消事务中的所有更改,就好像它从未发生过一样
如果您在没有提交的情况下终止数据库会话,事务将自动回滚。
如果您的 UPDATE
挂起,则必须有一个并发打开的事务正在持有锁。在 pg_stat_activity
中找到它并使用 pid
.
用 pg_terminate_backend
杀死它
如果重新启动没有处理锁,它可能是准备好的事务。签入 pg_prepared_xacts
并使用 ROLLBACK PREPARED
将其删除。
如果所有这些都不起作用,请查看 pg_stat_activity
并检查会话正在等待什么。
当我 运行 这个 UPDATE 查询时,它破坏了我的 PostgreSQL table messages
。我不再能够更新行或 table,因此不得不创建一个新的 table 并删除旧的。
cursor.execute('''
SELECT
outbounds.messages.oubd_msg_pvt_uuid,
outbounds.messages.oubd_ord_pvt_uuid,
outbounds.messages.oubd_cont_pvt_uuid,
outbounds.messages.oudb_sndr_pvt_uuid,
outbounds.messages.end_phn_pvt_uuid,
outbounds.messages.status
FROM outbounds.messages
WHERE outbounds.messages.status = false
''')
records = cursor.fetchall()
for row in records:
print(row['sender'], ' -> ', row['number'], ' = ', row['content'])
cursor.execute('UPDATE outbounds.messages SET status=true WHERE oubd_msg_pvt_uuid = %s', (row['oubd_msg_pvt_uuid'],))
print(cursor.rowcount, "Record Updated successfully ")
虽然它说它已更新,但实际上该行并未更新。
我是 Python 的新手所以现在确定我做错了什么?
您好像忘记提交交易了。
如果您在关系数据库中启动一个事务,则在您结束该事务之前,所有数据修改都不会持久。
结束交易有两种方式:
COMMIT
使更改持久化ROLLBACK
撤消事务中的所有更改,就好像它从未发生过一样
如果您在没有提交的情况下终止数据库会话,事务将自动回滚。
如果您的 UPDATE
挂起,则必须有一个并发打开的事务正在持有锁。在 pg_stat_activity
中找到它并使用 pid
.
pg_terminate_backend
杀死它
如果重新启动没有处理锁,它可能是准备好的事务。签入 pg_prepared_xacts
并使用 ROLLBACK PREPARED
将其删除。
如果所有这些都不起作用,请查看 pg_stat_activity
并检查会话正在等待什么。