2012-01-29 14 views
0

SQLiteデータベースに新しいレコードを挿入しようとしています。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;

あなたは間違っているものを私に助言でし挿入されたレコードの数を見つけることができます。なぜ2つの値が一致せず、なぜそれが負であるのか?

答えて

2

con.executeの代わりにcur.executeを試してください。 cur.rowcountその後、簡単な挿入のために私のために1を返します。

3

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

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

とPython DB API仕様によって要求されるように

、ROWCOUNT属性「が-1の場合に全くexecuteXX()はカーソル上で実行されていないか、最後の操作の行数ではありませんインタフェースによって決定可能である。

+0

あまりにも速く...ほぼ正確に私がタイピングの途中だったもの。私はそれがどれほど奇妙であるかを見るために、各ループを通して行数を表示することをお勧めします。 –

+0

これは私の愚かな誤操作でした。 Markが言ったように、私は行数を印刷しようとしたときに気づいた。私は 'con.execute'と打ち込んでしまい、不自由なところで' cur.execute'と打ったかのように動作しました。しかし、私はこの答えを受け入れることができると思います。他人がこのミスの可能性を知ることは良いかもしれません。 – xralf

関連する問題