繁体   English   中英

错误1452'无法添加或更新子行'

[英]Error 1452 'Cannot add or update a child row'

我正在尝试向表Bridges中插入新记录,我相信程序正在尝试在Bridges表中使用Bridge_ID而不是User_ID。 我在Ubuntu OS上使用MySQL和Python。

我已经尝试过的事情:

  1. 搜索堆栈溢出(以及许多其他站点)

  2. 问我的老师

  3. 空运行代码

sql DDL:

CREATE TABLE User ( 
    User_ID INT NOT NULL AUTO_INCREMENT, 
    Username VARCHAR(30) NOT NULL, 
    Email VARCHAR(50) NOT NULL, 
    Password VARCHAR(64) NOT NULL, 
    PRIMARY KEY (User_ID) 
);


CREATE TABLE Bridges( 
    User_ID INT NOT NULL, 
    Bridge_ID INT NOT NULL AUTO_INCREMENT, 
    Bridge_Name VARCHAR(30) NOT NULL, 
    BridgeFile BLOB NOT NULL, 
    Date_Last_Edit DATE NOT NULL, 
    Difficulty VARCHAR(10) NOT NULL, 
    Land_Type INT NOT NULL, 
    PRIMARY KEY (Bridge_ID), 
    FOREIGN KEY User_ID REFERENCES User(User_ID) 
);

值得注意的是,info ['User_ID']不会从1更改,并且在插入记录之前,回显User_ID保留的值以确认这一点。

进行的查询是:

command = ('INSERT INTO Bridges 
                    (User_ID,Bridge_Name,Date_Last_Edit,
                    BridgeFile,Difficulty,Land_Type) 
            VALUES ("%s","%s",CURDATE(),"%s","%s","%s");'  %(info['User_ID'],name,adjacencyList,info['dif'],info['land']))

错误是:

(1452,“不能添加或更新子行,外键约束失败( BridgeBuilderBridges ,约束Bridges_ibfk_1外键( Bridge_ID )参考文献UserUser_ID ))”)

如果需要更多详细信息,请更新帖子。

您应该检查值info ['User_ID']是否正确。 Bridges要求表User存在User_ID

我认为您没有正确将参数传递给查询。

请试试 :

sql = ("INSERT INTO Bridges 
                (User_ID, Bridge_Name, Date_Last_Edit, BridgeFile, Difficulty, Land_Type) 
                VALUES (%s, %s, CURDATE(), %s, %s, %s)"

vals = (info['User_ID'], name, adjacencyList, info['dif'], info['land'])

然后,您可以使用以下命令执行查询:

mycursor = mydb.cursor()
mycursor.execute(sql, vals)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM