該解決方案不使用「連接」,但通過case語句將Python中的數據合併到SQL中。你可以用python生成你想要的sql(作爲一個字符串),在一個巨大的case語句中包含這些值。
你沒有提供任何細節,也沒有說哪個版本的Python,所以很難提供有用的代碼。但是,這對Python 2.7,假設你有一些Python連接到MySQL數據庫:
exchange_rates = {'EUR': 1.10, 'GBP': 1.31, ...}
# create a long set of case conditions as a string
er_case_statement = "\n".join("mytable.currency = \"{0}\" then {1}".format(k,v) for (k,v) in exchange_rates.iteritems())
# build the sql with these case statements
sql = """select <some stuff>,
case {0}
end as exchange_rate,
other columns
from tables etc
where etc
""".format(er_case_statement)
然後發送此SQL到MySQL
我不喜歡這樣的解決方案;你最終會得到一個非常大的SQL語句,它可以達到最大值(What is maximum query size for mysql?)。
另一個想法是在mysql中使用臨時表。再次假設你正在連接到Python中的數據庫,使用python創建一個創建臨時表並插入匯率的sql,然後將其發送到MySQL,然後構建一個將數據連接到該臨時表的查詢。
最後你說你不想在python中後處理,但你有一個字典從某處我不知道你使用的是哪個環境但是如果你可以從網上獲得這些匯率, CURL,那麼你可以使用shell將這些值插入MySQL臨時表中,然後加入。
對不起,這是一般性的,而不是具體的,但問題可以使用更多的特異性。希望它能幫助別人給出更有針對性的答案。
謝謝,這非常有幫助。 – chrisvdb