Python:如何使用MySQLdb删除行数

时间:2015-12-09 07:30:24

标签: python mysql-python delete-row

我在下面的代码中删除了日期列值为current_date的表中的所有行。

db = MySQLdb.connect("localhost",'root','XXXX','XXXX')
cur = db.cursor()
query = "delete from RealTimeData where date = current_date()"
cur.execute(query)
db.commit()

现在,我怎么知道我的查询从表中删除了多少行? 我尝试fetchone()它正在返回None

2 个答案:

答案 0 :(得分:4)

您可以使用Cursot.rowcount属性:

cur.execute(query)
deleted_row_count = cur.rowcount

根据文件,

  

<强> .rowcount

     

此只读属性指定最后一行的行数   .execute *()生成(对于像SELECT这样的DQL语句)或受影响   (对于像UPDATE或INSERT这样的DML语句)。 [9]

答案 1 :(得分:2)

在Linux中使用Python 2.7.5,MySQLdb版本1.2.5:

关键是API仅为SELECT,INSERT和UPDATE返回.rowcount。来自https://www.python.org/dev/peps/pep-0249/

.rowcount:此只读属性指定最后一个.execute *()生成的行数(对于SELECT等DQL语句)或受影响的行(对于UPDATE或INSERT等DML语句)

请注意, NO 提及正在为DELETE更新此属性。关闭我的旧游标并在我的应用程序中创建一个新游标,我在DELETE语句后看到了.rowcount的结果为-1,完全如PEP249中所述。 (未来注释:返回值可能会更改为“无”而不是-1。)

所以, B计划:

with ... as mycursor:
    mycursor.execute("DELETE FROM mytable WHERE id = %s", params=(myindex,))
    mycursor.execute("SELECT ROW_COUNT() as rowcount")
    rows = mycursor.fetchall()
    rowcount = rows[0].get('rowcount', -1)

现在,变量rowcount具有执行DELETE SQL命令时删除的行数。

为什么不使用multi = True参数?来自https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html

如果multi设置为True,则execute()能够执行操作字符串中指定的多个语句。它返回一个迭代器,用于处理每个语句的结果。但是,使用参数在这种情况下效果不佳,并且通常最好自己执行每个语句。

(强调我的。)使用这种代码技术,我能够验证DELETE语句实际上删除了指定的记录。