我目前遇到的问题是我已经创建了一个问题。我不是"新" SQL和数据库逻辑,但我绝对不是专家。
首先,这是sproc:
CREATE PROCEDURE `insert_league_data` (
IN partipant_id VARCHAR(45),
IN summoner_id INT,
IN queue VARCHAR(45),
IN points INT,
IN tier VARCHAR(10),
IN name VARCHAR(45),
IN division INT
)
BEGIN
INSERT INTO league (
participant_id,
summoner_id,
queue,
points,
tier,
name,
division
)
VALUES (
participant_id,
summoner_id,
queue,
points,
tier,
name,
division
)
ON DUPLICATE KEY UPDATE
points=VALUES(points),
tier=VALUES(tier),
name=VALUES(name),
division=VALUES(division);
END
主键participant_id是VARCHAR(45)。我知道在这里使用INT是一个更好的范例,但是值是一个GUID,前面附加了几个字符。完全独特。
这里的问题是,当我调用这个sproc(我使用Python / mysql)时,表league
只存储一行,其中包含空的participant_id,更新的值是最后一次调用sproc,实际上与先存储的其他信息无关。
那么我的SQL逻辑看起来有缺陷吗?或者可能还有其他问题,可能是Python相关的,我错过了?我通过Python代码进行调试,并按预期将值传递给sproc。
以防万一,这里是Python代码:
data = (str(league_data.participantId), summoner_id, league_data.queue, 25, league_data.tier, league_data.name, 0)
self.cursor.callproc('insert_league_data', data)
编辑:我今天早上已经完成了一些额外的工作,我发现它肯定与SQL相关,而不是Python;我通过SQL查询调用了sproc并获得了相同的结果。
EDIT2:由于@Peter M,解决方案是复制参数和列名的名称。是否有一个好的系统可供使用,以便sproc参数在他们所指的内容中显而易见但不直接反映表的列名?