簡體   English   中英

Python在按字段連接兩個表時不返回數據

[英]Python don't return data when joining two tables by a field

我有一個查詢,它在 MySQL 中正確返回數據,但在 Python 中只返回部分數據。

查詢是:

select sc.* from tbl030_shots_chart sc, tbl006_player_team tc where
sc.id_fiba = tc.id_player_feb and
tc.id_team_club = 5

MySQL 中的此查詢返回 1030 行,就像您在此屏幕截圖中看到的那樣。

在此處輸入圖片說明

但是,如果我用 python 執行這個查詢,我只有 67 行。 這是我的代碼:

connection = 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 connection.cursor() as cursor:
    totalRows = cursor.execute("select sc.* from tbl030_shots_chart sc, tbl006_player_team tc where sc.id_fiba = tc.id_player_feb and tc.id_team_club = %s", [5])
    print("Total Rows: " + str(totalRows))

這是出口:

在此處輸入圖片說明

為什么我從 Python 獲得的數據比 MySQL 少?

這些是表的定義:

tbl030_shots_chart 在此處輸入圖片說明

tbl006_player_team 在此處輸入圖片說明

編輯我:

內連接在 python 中不起作用,但在 MySQL 中有效

在此處輸入圖片說明

但是,使用 python,仍然返回 76 行,而不是像 MySQL 那樣返回 1030 行。

connection = 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 connection.cursor() as cursor:
    totalRows = cursor.execute("select sc.* from tbl030_shots_chart as sc inner join tbl006_player_team as pt on sc.id_fiba = pt.id_player_feb and pt.id_team_club = %s", [5])
    print("Total Rows: " + str(totalRows))

在此處輸入圖片說明

如果我使用以下代碼從游標中獲得了總行數:

connection = 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 connection.cursor() as cursor:
    cursor.execute("select sc.* from tbl030_shots_chart as sc inner join tbl006_player_team as pt on sc.id_fiba = pt.id_player_feb and pt.id_team_club = %s", [5])
    totalRows = cursor.rowcount
    print("Total Rows: " + str(totalRows))

我返回了 76 行而不是 1030 行。

在此處輸入圖片說明

您可以嘗試為此查詢創建視圖

CREATE VIEW your_view AS (

    SELECT 
    t1.id,
    t1.id_game,
    t1.line,
    ...

    t2.id_team_club,
    t2.id_player_feb,
    ...

    FROM tbl030_shots_chart t1
    LEFT JOIN
    tbl006_player_team t2
)

然后在你的python代碼中:

sql = 'SELECT * FROM your_view WHERE id_fiba =id_player_feb AND id_team_club = %s'
with connection.cursor() as cursor:
    cursor.execute(sql, (5))

嘗試使用游標rowcount屬性:

with connection.cursor() as cursor:
    cursor.execute("select sc.* from tbl030_shots_chart sc, tbl006_player_team tc where sc.id_fiba = tc.id_player_feb and tc.id_team_club = %s", [5])
    totalRows=cursor.rowcount
    print("Total Rows: " + str(totalRows))

.execute方法中沒有定義返回值,所以你可以得到任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM