簡體   English   中英

從peewee創建的sqlite表的外鍵字段中的空值

[英]null value in foreign key field of sqlite table created from peewee

我在 python 中使用 peewee 作為 sqlite 的 orm,我創建了一個帶有外鍵字段的表,它必須接受空值,但它不會這樣做 - 我總是收到錯誤:“提交數據時發生錯誤:外鍵約束失敗的”

這里是 peewee 模型 (BaseModel) 的 python 代碼——如您所見,相關字段“klasse”設置為“null=True”,但不接受空值:

class Lerngruppe(BaseModel):
    bezeichner = TextField(primary_key=True)
    
    # somtimes no group of pupils available (=> null=True)
    klasse = ForeignKeyField(
        Klasse, column_name="klasse_id", null=True)
    
    fach = ForeignKeyField(
        Fach, column_name="fach_id", null=False)
    
    lehrkraft = ForeignKeyField(
        Lehrkraft, column_name="lehrkraft_id", null=False)
    
    von = DateField(null=True)
    
    bis = DateField(null=True)

peewee 然后創建以下 sqlite 表 (sqlite-DDL):

CREATE TABLE lerngruppe (
    bezeichner   TEXT        NOT NULL
                             PRIMARY KEY,
    klasse_id    TEXT,
    fach_id      VARCHAR (7) NOT NULL,
    lehrkraft_id VARCHAR (5) NOT NULL,
    von          DATE,
    bis          DATE,
    notiz        TEXT,
    FOREIGN KEY (
        klasse_id
    )
    REFERENCES klasse (bezeichner),
    FOREIGN KEY (
        fach_id
    )
    REFERENCES fach (kuerzel),
    FOREIGN KEY (
        lehrkraft_id
    )
    REFERENCES lehrkraft (kuerzel) 
);

外鍵指向對應的peewee模型(BaseModel)“Klasse”:

class Klasse(BaseModel):

    # target of the foreignkey
    bezeichner = TextField(primary_key=True)

    stammraum = ForeignKeyField(
        Raum, column_name="stammraum_id", null=True)

    klassenleitung = ForeignKeyField(
        Lehrkraft, column_name="klalei_id", null=True)

    coklassenleitung = ForeignKeyField(
        Lehrkraft, column_name="coklalei_id", null=True)

這個模型定義的 DDL 是:

CREATE TABLE klasse (
    bezeichner   TEXT          NOT NULL
                               PRIMARY KEY,
    stammraum_id VARCHAR (255),
    klalei_id    VARCHAR (5),
    coklalei_id  VARCHAR (5),
    FOREIGN KEY (
        stammraum_id
    )
    REFERENCES raum (name),
    FOREIGN KEY (
        klalei_id
    )
    REFERENCES lehrkraft (kuerzel),
    FOREIGN KEY (
        coklalei_id
    )
    REFERENCES lehrkraft (kuerzel) 
);

有什么幫助嗎?

從您的問題中不清楚錯誤發生在哪里。 需要檢查的幾件事:

  • 確保在創建表之前刪除它。 如果 peewee 看到該表已存在,則不會重新創建它。
  • 嘗試插入新數據時是否發生錯誤? 如果是這樣,錯誤消息可能表明不匹配的主鍵而不是 NULL 值違反了 FK 約束
  • 你用的是什么數據庫? 我假設sqlite?

你能分享代碼來重現這個問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM