[英]SQLite PRIMARY KEY and FOREIGN KEY definition
我想我在 PRIMARY KEY 和 FOREIGN KEY 的表定義中失敗了。
導入和創建在 sqlite3 數據庫中工作正常。 沒有錯誤信息。
這是我的聲明:
CREATE TABLE "contact"
(
"id" INTEGER NOT NULL,
"uniqueid" INTEGER NOT NULL,
"mod_time" TEXT,
"mod_datetime" TEXT,
"features_doorphone" TEXT,
"setup" TEXT,
"category" INTEGER,
"pb_id" INTEGER NOT NULL,
FOREIGN KEY("pb_id") REFERENCES "phonebook"("id_pb"),
PRIMARY KEY ("id", "uniqueid", "pb_id")
);
但是,如果我嘗試將值寫入表中,則會出現此錯誤:
IntegrityError:NOT NULL 約束失敗:
追溯(最近一次通話):
db_insert_phonebook 中的文件“D:.._parser.py”,第 107 行
cur.executemany("INSERT INTO contact(uniqueid, category, pb_id) VALUES(?, ?, ?);", args[1])
sqlite3.IntegrityError:NOT NULL 約束失敗:contact.id
在處理上述異常的過程中,又出現了一個異常:
Traceback (most recent call last):
File "D:\.._parser.py", line 134, in <module>
fritz_phone_parser(file_path)
File "D:\.._parser.py", line 96, in fritz_phone_parser
db_insert_phonebook(meta_date, contact_l, person_l, telephony_l, services_l, person_img_l)
File "D:\.._parser.py", line 106, in db_insert_phonebook
with db as cur:
File "D:\.._parser.py", line 36, in __exit__
self.rollback()
AttributeError: 'SQLite_db' object has no attribute 'rollback'
這是我的 python 插入命令:
def db_insert_phonebook(*args):
with db as cur:
cur.execute("INSERT INTO phonebook(pb_name, pb_owner, pb_date_last_edit) VALUES(?, ?, ?);", args[0])
print("Phonebook table filled") # pb_owner = pb_id
with db as cur:
cur.executemany("INSERT INTO contact(uniqueid, category, pb_id) VALUES(?, ?, ?);", args[1])
我插入的值都可用。 如果我只用一個 PRIMARY KEY 定義表,則插入工作沒有任何錯誤。
定義工作正常:
CREATE TABLE "contact"
(
"id" INTEGER NOT NULL,
"uniqueid" INTEGER,
"mod_time" TEXT,
"mod_datetime" TEXT,
"features_doorphone" TEXT,
"setup" TEXT,
"category" INTEGER,
"pb_id" INTEGER,
FOREIGN KEY("pb_id") REFERENCES "phonebook"("id_pb"),
PRIMARY KEY("id")
);
我認為它與我的復合主鍵定義有關。 任何提示都非常受歡迎。 我忘了注意到我在內存數據庫上工作。
我的意思是解決方案是單字段主要+唯一約束:
CREATE TABLE "contact"
(
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"uniqueid" INTEGER NOT NULL,
"mod_time" TEXT,
"mod_datetime" TEXT,
"features_doorphone" TEXT,
"setup" TEXT,
"category" INTEGER,
"pb_id" INTEGER NOT NULL,
FOREIGN KEY("pb_id") REFERENCES "phonebook"("id_pb"),
UNIQUE("id", "uniqueid", "pb_id")
);
在這里檢查
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.