1

SQLiteコードからデータベースに新しいレコードを挿入しようとしていPythonます。

  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

何が悪いのか教えていただけますか。2 つの値が一致しないのはなぜですか。また、負の値になるのはなぜですか?

4

2 に答える 2

3

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

sqlite3 モジュールの Cursor クラスはこの属性を実装していますが、「影響を受ける行」/「選択された行」の決定に対するデータベース エンジン独自のサポートは風変わりです。

Python DB API 仕様で要求されているように、rowcount 属性は「カーソルに対して executeXX() が実行されていない場合、または最後の操作の行数がインターフェイスによって決定できない場合は -1 です」。

于 2012-01-29T20:59:12.580 に答える
2

cur.executeの代わりに試してくださいcon.executecur.rowcount次に、単純な挿入の場合は 1 を返します。

于 2012-01-29T21:12:23.547 に答える