-3

ここに私のテーブルがあります:

drop table if exists stocks;
create table stocks (
  stock_id integer primary key not null,
  stockname string not null
);

Python コード:

import sqlites3    
rows = [(1, 'IBM'),
          (2, 'MSOFT'),
          (1, 'GOOG'),
         ]
#c.executemany('insert into stocks values (?,?)', rows )
connection.commit()

ではrows、1 番目と 3 番目の主キーは同じです。

これを行うとどうなりますか?例外はありますか?例外をキャッチするにはどうすればよいですか?

実際にrowsは動的入力なので、最初は並べ替えや編集ができませんrows。また、Ubuntu 10.04 で Flask 0.9 と Python 2.6 を使用しています。

4

1 に答える 1

3

例外があります。sqlite3.IntegrityError発生します:

>>> c.executemany('insert into stocks values (?,?)', [(1, 'IBM'), (2, 'MSOFT'), (1, 'GOOG')])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.IntegrityError: PRIMARY KEY must be unique

例外が発生する前の挿入はすべて成功しているためconnection.rollback()、例外が発生したときに呼び出す必要があります。さらに良いのは、接続をコンテキスト マネージャーとして使用して、自動的にロールバックまたはコミットすることです。

try:
    with connection:
        c = connection.cursor()
        c.executemany('insert into stocks values (?,?)', rows)
    # insertion succeeded, `connection.commit()` is called automatically
except sqlite3.IntegrityError:
    # insertion failed, `connection.rollback()` is called automatically
于 2012-12-24T09:13:46.593 に答える