python - 为链接表选择键时插入多行的最佳实践
问题描述
我正在开发一个机器人来保存游戏的日志数据。一个日志包括多达 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 字符串。
但它看起来并不干净,那么最佳做法是什么?
解决方案
推荐阅读
- sql - 显示在主题“M”中通过但在主题“P”中失败的名称
- video - 清除 Pepper 的 chash 内存
- php - 从数据库中插入选择框列
- python - Anaconda Python - 如何重新安装 NumPy
- regex - 在 Blue Prism Application Modeller 中使用正则表达式
- google-sheets - 如何计算范围中的值出现在一个范围内的次数,不包括其他范围
- javascript - 如何将每 2 次递增的值添加到数组的每个对象?
- html - 使用 htaccess 将 http 重定向到 https
- javascript - Firebase:使用电子邮件成功登录后,如何使用 Firebase api 获取经过身份验证的用户令牌?
- javascript - 为什么我不能走子组件的路线?