我必須對整個表進行多個 sql 查詢,并將它們連接成一個大資料表。
我有一個字典,其中鍵是團隊名稱,值用作首字母縮略詞,其中首字母縮略詞是 mySQL 資料表的前綴
engine = create_engine('mysql mysqlconnector://%s:%s@%s/%s' % (mysql_user, mysql_password, mysql_host, mysql_dbname), echo=False, pool_recycle=1800)
mysql_conn = engine.connect()
team_dfs = []
nba_dict = {'New York Knicks': 'nyk',
'Boston Celtics': 'bos',
'Golden State Warriors': 'gsw',
'New York Knicks': 'nyk'}
for name, abbr in nba_dict.items()
query = f'''
SELECT *
from {abbr}_record
'''
df = pd.read_sql_query(query, mysql_conn)
df['team_name'] = name
team_dfs.append(df)
team_dfs = pd.concat(team_dfs)
有沒有更好的方法來重構這段代碼并使其更高效?
uj5u.com熱心網友回復:
如果你nba_dict是固定的,你可以使用UNION手動組合SQL的結果表。
abbr = list(nba_dict.values())
query = f'''
SELECT *
from {abbr[0]}_record UNION
SELECT *
from {abbr[1]}_record UNION
SELECT *
from {abbr[2]}_record UNION
SELECT *
from {abbr[3]}_record UNION
'''
df = pd.read_sql_query(query, mysql_conn)
df['team_name'] = list(nba_dict.keys())
uj5u.com熱心網友回復:
當您需要一次為多個團隊檢索資料時,您的資料庫布局(每個團隊都有一個單獨的表)注定會效率低下。你會多很多關把所有好,在一個表中的資料,使表中的列提的每一行相應的團隊。
為什么效率低下?更多的表:更多的作業。而且,更多的查詢:更多的作業。
我建議你推回去,硬,在這個資料庫表結構的設計。坦率地說,它的設計是錯誤的。
如果您必須忍受這種結構,我建議您創建以下視圖。它會偽造單表方法并為您提供“黃金層”。您可以避免這種情況,因為職業體育特許經營權不會經常來來去去。您只需在資料庫中執行一次此操作。
CREATE OR REPLACE VIEW teams_record AS
SELECT 'nyk' team, * FROM nyk_record
UNION ALL
SELECT 'bos' team, * FROM bos_record
UNION ALL
SELECT 'gsw' team, * FROM gsw_record
UNION ALL .... the other teams
然后你可以做SELECT * FROM teams_record ORDER BY team來獲取你的所有資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379348.html
上一篇:如何在firebasefirestore中獲取內部集合
下一篇:用C 初始化陣列:最快的方法?
