我在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
您可以共享代码来重现问题吗?