-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 回答