改成一个已经有人用的名字
名字那一列是唯一的。把红茶的名字改成"绿茶"(表里已经有绿茶)。输出两样:违反了哪一条、是哪一列(用 / 隔开)。
id name cat price stock 约束 1 绿茶 饮料 6 12 id 主键 2 红茶 饮料 6 0 name 非空且唯一 3 苏打水 饮料 5 (空) cat 非空 4 薯片 零食 8 7 price 非空 5 海苔 零食 12 3 stock 可以为空 6 巧克力 零食 15 (空) 7 铅笔 文具 2 40 8 笔记本 文具 9 5 9 橡皮 文具 3 0 10 冰红茶 饮料 4 20
import sqlite3
db = sqlite3.connect(":memory:")
db.execute("""CREATE TABLE goods (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
cat TEXT NOT NULL,
price INTEGER NOT NULL,
stock INTEGER)""")
db.executemany("INSERT INTO goods VALUES (?,?,?,?,?)", [
(1, "绿茶", "饮料", 6, 12), (2, "红茶", "饮料", 6, 0),
(3, "苏打水", "饮料", 5, None), (4, "薯片", "零食", 8, 7),
(5, "海苔", "零食", 12, 3), (6, "巧克力", "零食", 15, None),
(7, "铅笔", "文具", 2, 40), (8, "笔记本", "文具", 9, 5),
(9, "橡皮", "文具", 3, 0), (10, "冰红茶", "饮料", 4, 20)])
import sqlite3
try:
db.execute("UPDATE goods SET name = '绿茶' WHERE id = 2")
print("没报错")
except sqlite3.IntegrityError as e:
msg = str(e)
print(msg.split(" constraint")[0].replace(" ", "")
+ "/" + msg.split(":")[-1].strip())
全部评论