我想在表中添加一個新的模型實例,但它總是顯示“無法添加或更新子行:外鍵約束失敗”。我已經檢查過 userTable 是否有 UserId。這是用戶表的內容:{ "ID": 1, "UserId": "001201400047", "UserName": "User A", "UserPass": "admin", "UserStatus": "admin" },{ "ID": 2, "UserId": "100100010000", "UserName": "User B", "UserPass": "user", "UserStatus": "student" }from peewee import *from datetime import datetimedatabase = MySQLDatabase('AAS', **{'passwd': 'admin', 'charset': 'utf8', 'user': 'yusfa', 'use_unicode': True})class UnknownField(object): def __init__(self, *_, **__): passclass BaseModel(Model): class Meta: database = databaseclass Classtable(BaseModel): classid = CharField(column_name='ClassId', primary_key=True) lecturerid = ForeignKeyField(column_name='LecturerId', model=Lecturertable) roomid = ForeignKeyField(column_name='RoomId', model=Roomtable) subjectid = ForeignKeyField(column_name='SubjectId', model=Subjecttable) class Meta: table_name = 'classTable'class Usertable(BaseModel): id = AutoField(column_name='ID') userid = CharField(column_name='UserId', unique=True) username = CharField(column_name='UserName', null=True) userpass = CharField(column_name='UserPass', null=True) userstatus = CharField(column_name='UserStatus', null=True) class Meta: table_name = 'userTable'class Attendancetable(BaseModel): classid = ForeignKeyField(column_name='ClassId', model=Classtable, null=True) date = DateTimeField(column_name='Date', null=True) id = AutoField(column_name='ID') userid = ForeignKeyField(column_name='UserId', model=Usertable, null=True)我希望在 Attendancetable 中會有一個新的模型實例,但實際輸出是 peewee.IntegrityError: (1452, '無法添加或更新子行:外鍵約束失敗 ( AAS. attendanceTable, CONSTRAINT fk_attendanceTable_1FOREIGN KEY ( UserId) REFERENCES userTable( userid))' )。
2 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
模型類表明 fk 來自 Attendancetable.userid -> Usertable.id
db 約束表明外鍵來自 Attendancetable.userid -> Usertable.userid
可能需要修復模型定義,以便 FK 指向右列:
class Attendancetable(BaseModel):
classid = ForeignKeyField(column_name='ClassId', model=Classtable, null=True)
date = DateTimeField(column_name='Date', null=True)
id = AutoField(column_name='ID')
userid = ForeignKeyField(column_name='UserId', field='userid', model=Usertable, null=True)
看起來您預先存在的架構可能有點混亂。所以你可能需要清理一下。

斯蒂芬大帝
TA貢獻1827條經驗 獲得超8個贊
x
當您將它們轉換為下一行的字符串時,不會保留它們的前導零。行插入失敗,因為"1201400047"
不在["001201400047", "100100010000"]
str(x).zfill(USER_ID_WIDTH)
可能是一個解決方案
添加回答
舉報
0/150
提交
取消