亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在peewee中創建新模型實例時如何修復“無法添加或更新子行:外鍵約束失敗”

在peewee中創建新模型實例時如何修復“無法添加或更新子行:外鍵約束失敗”

HUWWW 2021-12-29 19:21:26
我想在表中添加一個新的模型實例,但它總是顯示“無法添加或更新子行:外鍵約束失敗”。我已經檢查過 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)

看起來您預先存在的架構可能有點混亂。所以你可能需要清理一下。


查看完整回答
反對 回復 2021-12-29
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

x當您將它們轉換為下一行的字符串時,不會保留它們的前導零。行插入失敗,因為"1201400047"不在["001201400047", "100100010000"]

str(x).zfill(USER_ID_WIDTH) 可能是一個解決方案


查看完整回答
反對 回復 2021-12-29
  • 2 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號