python - 为什么没有再次创建游标?
问题描述
我有这段代码,它只在第一次执行循环时返回数据。其他时候,尽管数据库中有数据并且查询定义明确,但游标不返回任何内容。而且我不知道为什么,因为每次执行循环时,都会创建连接和游标。
def get_team_colour_map(self, players, id_competition):
tcm = FIBAColourMap()
for p in players:
args = [p["id"], id_competition]
conn = pymysql.Connect(host = DDBB.DDBB_FIBA_HOST,
user = DDBB.DDBB_FIBA_USER,
password = DDBB.DDBB_FIBA_PSWD,
db = DDBB.DDBB_FIBA_NAME,
charset = DDBB.DDBB_FIBA_CHARSET,
cursorclass=pymysql.cursors.DictCursor)
with conn.cursor() as cursor:
print("id player: {}".format(p["id"]))
print("args: {}".format(args))
cursor.execute("select sc.* from tbl030_shots_chart sc, tbl006_player_team pt, tbl007_game g, tbl004_jornada j, tbl012_competition c where pt.id = %s and pt.id_player_feb = sc.id_fiba and sc.id_game = g.id and g.id_jornada = j.id and j.id_competition = c.id and c.id = %s", args)
data = cursor.fetchall()
print("data: {}".format(data))
print("Total rows: {}".format(cursor.rowcount))
if cursor.rowcount > 0:
for s in data:
x = float(FIBASCReport.adjust_x(s["x"]))
y = float(FIBASCReport.adjust_y(s["y"]))
color = tcm.image.getpixel((x,y))
color = ("#%02x%02x%02x" % color).upper()
if tcm.exists_color(color):
if int(s["m"]) == 0:
tcm.set_scored_shots(color, 1)
else:
tcm.set_failed_shots(color, 1)
else:
if int(s["m"]) == 0:
tcm.set_scored_shots("OTROS", 1)
else:
tcm.set_failed_shots("OTROS", 1)
else:
#tcm = None
print("Jugadora con id: {} NO ha realizado ningún tiro en competición: {}".format(p["id"], id_competition))
return tcm
在此代码中, cursor.fetchall() 第一个查询返回数据,但下一个查询返回空结果。
解决方案
尝试在循环运行后重置光标,以便在每个循环上获得一个“干净”的光标:
if cursor.rowcount > 0:
for s in data:
x = float(FIBASCReport.adjust_x(s["x"]))
y = float(FIBASCReport.adjust_y(s["y"]))
color = tcm.image.getpixel((x,y))
color = ("#%02x%02x%02x" % color).upper()
if tcm.exists_color(color):
if int(s["m"]) == 0:
tcm.set_scored_shots(color, 1)
else:
tcm.set_failed_shots(color, 1)
else:
if int(s["m"]) == 0:
tcm.set_scored_shots("OTROS", 1)
else:
tcm.set_failed_shots("OTROS", 1)
cursor.reset()
推荐阅读
- python - 你能帮我让我的按钮在 Pygame 中工作吗?
- c - 如何在C中一次扫描多个字符?
- javascript - 当表单提交和刷新我的加载屏幕的页面再次出现时?
- rust - 如何在 NixOS 和 cargo 下安装具有 sqlite 支持的diesel-cli?
- javascript - API的“response.data”后如何获取数据
- python - 将两个熊猫数据框与一个公共列合并
- excel - 创建新工作表的子程序会在几分之一秒内打开 VBA 编辑器
- javascript - Bootstrap 5 - 调整窗口大小时的动画折叠动画
- javascript - 获取选定密码的 Firefox 扩展
- android - 使用http颤振发布数组