gpt4 book ai didi

python-2.7 - sqlite3 python 2.7 如何从 sqlite3 启用更详细的错误报告(异常)?

转载 作者:行者123 更新时间:2023-12-03 06:57:34 25 4
gpt4 key购买 nike

我正在尝试使用 executemany 函数插入多行。我的完整代码在最后给出。

我得到的异常(exception)是

sqlite3.IntegrityError: column carname is not unique

我希望能够提供更详细的错误报告,给出导致错误的违规值。是否可以从sqlite3获取更详细的错误报告(在异常中),以便它返回导致错误的违规值?例如,在我的代码中,以下值是违规的:

(0, 'Audi', 52642),
(1, 'Audi', 52642),

carname 应该是唯一的。

或者我是否必须仅一一插入值并观察异常?

我的代码:基于this tutorial ,我在列 carname 上添加了 UNIQUE 约束。

import sqlite3 as lite
import sys

cars = (
(0, 'Audi', 52642),
(1, 'Audi', 52642),
(2, 'Mercedes', 57127),
(3, 'Skoda', 9000),
(4, 'Volvo', 29000),
(5, 'Bentley', 350000),
(6, 'Hummer', 41400),
(7, 'Volkswagen', 21600)
)

tblstr = """CREATE TABLE cars (
carid integer PRIMARY KEY,
carname NVARCHAR(50) UNIQUE,
price integer NOT NULL
);"""


con = lite.connect('test.db')

with con:

cur = con.cursor()

cur.execute("DROP TABLE IF EXISTS Cars")
cur.execute(tblstr)
cur.executemany("INSERT INTO Cars VALUES(?, ?, ?)", cars)

最佳答案

我认为,由于您对其中一个列名称设置了唯一约束,除非您预先审查了数据,否则不应使用 executemany
相反,使用 for ... 循环 循环数据,并在每次更新的 try .. except 语句中使用 execute
这允许您列出所有错误并继续。
例如:

with con:

cur = con.cursor()

cur.execute("DROP TABLE IF EXISTS Cars")
cur.execute(tblstr)
for x in cars:
try:
cur.execute("INSERT INTO Cars(carid,carname,price) VALUES(?, ?, ?)",(x[0],x[1],x[2]))
except Exception as err:
print err, x

关于python-2.7 - sqlite3 python 2.7 如何从 sqlite3 启用更详细的错误报告(异常)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38463194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com