首页 > 解决方案 > 为链接表选择键时插入多行的最佳实践

问题描述

我正在开发一个机器人来保存游戏的日志数据。一个日志包括多达 10 名玩家的得分,并且分阶段进行,我想跟踪每个阶段的每个玩家得分,并使其易于访问和分类。

我有桌子:

log: id, time, ...  # basic log info

phase: id, log_id, nr, ...  # phase info, ~5 per log

player_score: id, phase_id, player_id, score, ...  # player score up to 10x per phase

player: id, name, ...  # basic player info, ~1000 entries

所以一个基本的结构来保存数据并允许我在特定阶段过滤玩家得分。我在 python 对象中有数据,并希望将其插入表中。

插入一个玩家行可以通过以下方式处理:

INSERT INTO player_score (phase_id, player_id, score, ...)
SELECT p.id, pl.id, "score", ... 
FROM phase p INNER JOIN player pl
WHERE p.nr = 'phase_nr' AND pl.name = 'player_name'

所以这里的实际问题是:插入这些行的最佳做法是什么?如果有 10 个玩家和平均约 5 个阶段,我每个日志有 50 多个插入。

我是否为每个玩家 x 阶段在 python 中循环 cursor.execute(sql) ?

我是否将插入链接在一个 sql 中并执行一次?

我似乎找不到一个 INSERT INTO ... VALUES row1, row2, row3 语法,它允许我运行 id select for ever row。

首先将数据上传到临时表中,将其与播放器连接,然后将数据从组合表传输到 player_score 是否更好?

我运行的最快版本是首先执行: SELECT id FROM player WHERE name IN ("name1","name2","name3") 然后使用响应在 python 中构建 INSERT 字符串。

但它看起来并不干净,那么最佳做法是什么?

标签: pythonmysqlinsert

解决方案


推荐阅读