我在Django项目上工作,需要在另一个远程数据库(不是Django DB)中应用更改.

这些变化是不同步的,并与Celery 一起推出.但在执行这些查询时,我需要知道更新是否很好地计算了受影响的行数,否则我必须采取纠正措施. 到目前为止,我还没有找到任何方法来做到这一点.我试了cusr.fetchone()curs.fetchall(),但结果是None.当I为print(curs.execute())时,即使找到乘积,结果也是0.This thread表示如果完成更新,则应为1. 即使是official documentation也不会谈论这个.

因此,就目前而言,我找到的唯一解决办法是执行第一个SELECT查询,如果是rowcount < 1,我将引发Exception.不是很好...

有没有办法做得更好? 注:我用的是django.db.backends.mysqlpymysql

推荐答案

如果不是您的方法,我建议您在提交和判断之后立即判断受影响的行.

from django.db import connection

# Initialize affected_rows outside the context manager
affected_rows = None

# Assuming you have a SQL update query
update_query = "UPDATE your_table SET your_column = your_value WHERE your_condition"

# Get a cursor
with connection.cursor() as cursor:
    # Execute the update query
    cursor.execute(update_query)
    
    # Commit the transaction
    cursor.connection.commit()
    
    # Get the number of affected rows
    affected_rows = cursor.rowcount

# Check if the update was successful
if affected_rows is not None and affected_rows > 0:
    # Update was successful, take appropriate action
    pass
else:
    # No rows were affected, handle the error or raise an Exception
    raise Exception("No rows were affected by the update query.")

按顺序try 此操作并查找受影响的行

  1. 使用cursor.execute()方法执行SQL查询.
  2. 使用cursor.connection.commit()方法提交事务.
  3. 使用cursor.rowcount属性可获取受影响的数量 排好了.

Mysql相关问答推荐

为什么IN子句中有GROUP BY会导致查询变得不可执行?

MySQL INSERT INSERT ON DIPLICATE KEY UPDATE WITH COMPAY PRIMARY KEY失败

MySQL添加表会将&@@&qot;追加到表名

如何查询一行

为什么用PyMySQL构建的json返回结果会出现重复?

如何创建一个列,该列在另一个表中具有值的计数?

在两个日期之间生成每个月的1行数据.

如何计算具有权重属性的记录数

将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

估计对大表进行分区所需的时间

拆分列值并适当地返回拆分值

如何在 axios 请求中将更新的设置状态值作为参数传递

有人可以帮我优化这个查询吗?

如何在每个国家/地区查询 GHTorrent(类 SQL 语言)的最常用语言

如何使用 laravel 连接 mysql?

如何在 MySQL 中搜索多个列?

脚本超时,如果要完成导入,请重新提交相同的文件,导入将恢复

MySQL计算特定值的列

utf8mb4_unicode_ci 与 utf8mb4_bin

在 MySQL Workbench 中导出超过 1000 条记录的查询结果