【问题标题】:how to use rowcount in mysql using python如何使用python在mysql中使用rowcount
【发布时间】:2017-07-07 05:08:33
【问题描述】:

我们正在一个学生记录项目中实施一个数据库。我们想看看在从表中删除一行之前和之后表中有多少行。 我们尝试的代码如下:

1  roll=5
2  m = mysql.connector.connect(host='localhost', database='student',user='root', password='')
3  cur = m.cursor()
4  rc = cur.rowcount
5  print("%d"%rc)
6  e=cur.execute("DELETE FROM `acc_details` WHERE roll_No=%s" % roll)
7  print("%d"%cur.rowcount) 

在上面的代码中,第 4 行的第一个 rowcount 给出了 -1 作为输出,最后一行的 rowcount 给出了删除一行后表的行数。

为什么第 4 行的第一个 rowcount 会给出 -1 作为输出?

任何帮助都会很棒。

【问题讨论】:

    标签: python mysql rowcount


    【解决方案1】:

    根据 psycopg2 的文档,cur.rowcount 返回同一 cur 对象的最后一个执行方法影响的行数,因此它为第一个 cur.rowcount 调用返回 -1,因为没有先前的 execute()方法。

    你可以试试这个-

    roll=5 
    m = mysql.connector.connect(host='localhost', database='student',user='root', password='')
    cur = m.cursor()
    cur.execute("SELECT * FROM `acc_details`")
    cur.fetchall()
    rc = cur.rowcount
    print("%d"%rc)
    e=cur.execute("DELETE FROM `acc_details` WHERE roll_No=%s" % roll)
    print("%d"%cur.rowcount) 
    

    【讨论】:

    • 感谢您的回复,但这会给出错误消息:mysql.connector.errors.InternalError: Unread result found
    • Dint 注意到您使用的是 mysql。请检查答案中代码第 4 行的编辑。现在应该可以工作了。
    【解决方案2】:

    包含您的代码

    m.commit()
    cur.close()
    m.close()
    

    如果您的代码没有这些,也许您可​​以添加它们。 还有你的前 4 行,我认为你应该添加

    cur.execute('select * from 'table_name'')
    cur.fetchall()
    

    那么你就可以得到rowcount了。希望我的回答能帮到你。

    【讨论】:

      【解决方案3】:

      cursor.rowcount 将输出 -1,直到您获取结果的所有行。除非您使用缓冲游标,否则应在获取实际行数之前使用 cursor.fetchall()。

      【讨论】:

      猜你喜欢
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多