【问题标题】:Number of rows inserted into SQLite db is negative插入 SQLite db 的行数为负数
【发布时间】:2012-01-29 20:54:38
【问题描述】:

我正在尝试从Python 代码将新记录插入SQLite 数据库。

  con = sqlite.connect(connectionString)
  cur = con.cursor()
  countOfNewItems = 0
  for ...
    try:
      con.execute("insert or ignore into items ...")
      countOfNewItems += cur.rowcount
    except:
      cur.close()
      con.close()
      print "Error when inserting item '%s' to database." % item
      exit(1)
  cur.close()
  con.commit()
  con.close()
  print "%d new items have been inserted." % countOfNewItems

我的代码报告插入记录数为负数 (-5141)。

因为我的数据库是空的,所以我可以通过命令行查看插入了多少条记录

select count(*) from items;

4866

你能告诉我有什么问题吗?为什么这两个值不匹配,为什么是负数?

【问题讨论】:

    标签: python sqlite insert rowcount


    【解决方案1】:

    http://docs.python.org/library/sqlite3.html#sqlite3.Cursor.rowcount

    虽然 sqlite3 模块的 Cursor 类实现了这个属性,但数据库引擎自己对确定“受影响的行”/“选定的行”的支持是古怪的。

    根据 Python DB API 规范的要求,rowcount 属性“如果没有在游标上执行 executeXX() 或最后一个操作的行数无法由接口确定,则为 -1”。

    【讨论】:

    • 太快了……几乎就是我正在打字的时候。我建议通过每个循环打印出行数,看看它有多“古怪”。
    • 这是我愚蠢的错误输入。正如马克所说,当我尝试打印行数时,我注意到了这一点。我输入了con.execute,不幸的是,它就像我输入了cur.execute一样工作。但我想我可以接受这个答案,让其他人知道这个错误的可能性可能会很好。
    【解决方案2】:

    尝试cur.execute 而不是con.executecur.rowcount 然后为我返回 1 进行简单插入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2014-04-28
      相关资源
      最近更新 更多