为什么不再创建光标?

问题描述 投票:0回答:1

我有这个代码只在第一次执行循环时返回数据。另一方面,尽管数据库中有数据并且查询定义良好,但游标不会返回任何内容。我不知道为什么,因为每次执行循环时,都会创建连接和光标。

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()返回第一个查询的数据,但下一个查询返回空结果。

python mysql python-3.x pymysql
1个回答
2
投票

在循环运行后尝试重置光标,以便在每个循环上获得一个“干净”的光标:

 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()
© www.soinside.com 2019 - 2024. All rights reserved.