从peewee创建的sqlite表的外键字段为null值



我在python中使用peewee作为sqlite的orm,并创建了一个带有foreignkey字段的表,该字段必须接受null值,但它不能接受null值-我总是得到错误:"提交数据时发生错误:FOREIGN KEY约束失败";

这里是peewee模型(BaseModel(的python代码-正如您所看到的相关字段";klasse";被设置为"0";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表(sqliteDDL(:

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

您可以共享代码来重现问题吗?

相关内容

  • 没有找到相关文章

最新更新