SQL Sproc没有填充字段

时间:2014-12-13 06:20:39

标签: mysql sql

我目前遇到的问题是我已经创建了一个问题。我不是"新" 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参数在他们所指的内容中显而易见但不直接反映表的列名?

0 个答案:

没有答案