将 Python 字典加入 MySQL table
Joining Python dict with MySQL table
有没有办法执行 SQL 查询,将 MySQL table 与不在数据库中但在查询中提供的类字典结构连接起来?
特别是,我经常需要 post 处理从数据库中提取的具有相应汇率的数据。汇率未存储在数据库中,而是即时检索并临时存储在 Python 字典中。
所以,我有一个字典:exchange_rates = {'EUR': 1.10, 'GBP': 1.31, ...}.
让我们说一些查询 returns 是这样的:id,数量,currency_code。
是否可以将字典添加到查询中以便我可以 return: id, amount, currency_code, usd_amount?这将消除 post-process in Python.
的需要
此解决方案不使用 'join',但确实通过 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中使用临时tables。再次假设您要连接到 python 中的数据库,使用 python 创建 sql 创建临时 table 并插入汇率,将其发送到 MySQL,然后构建一个查询,将您的数据连接到该临时 table。
最后你说你不想 post-process in python 但你有来自某处的命令我不知道你使用的是哪个环境但是如果你能得到这些来自网络的汇率,比如使用 CURL,然后您可以使用 shell 将这些值也插入到 MySQL 临时 table,然后加入那里。
抱歉,这是笼统的而不是具体的,但是这个问题可以使用更具体的。希望它能帮助别人给出更有针对性的答案。
有没有办法执行 SQL 查询,将 MySQL table 与不在数据库中但在查询中提供的类字典结构连接起来?
特别是,我经常需要 post 处理从数据库中提取的具有相应汇率的数据。汇率未存储在数据库中,而是即时检索并临时存储在 Python 字典中。
所以,我有一个字典:exchange_rates = {'EUR': 1.10, 'GBP': 1.31, ...}.
让我们说一些查询 returns 是这样的:id,数量,currency_code。
是否可以将字典添加到查询中以便我可以 return: id, amount, currency_code, usd_amount?这将消除 post-process in Python.
的需要此解决方案不使用 'join',但确实通过 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中使用临时tables。再次假设您要连接到 python 中的数据库,使用 python 创建 sql 创建临时 table 并插入汇率,将其发送到 MySQL,然后构建一个查询,将您的数据连接到该临时 table。
最后你说你不想 post-process in python 但你有来自某处的命令我不知道你使用的是哪个环境但是如果你能得到这些来自网络的汇率,比如使用 CURL,然后您可以使用 shell 将这些值也插入到 MySQL 临时 table,然后加入那里。
抱歉,这是笼统的而不是具体的,但是这个问题可以使用更具体的。希望它能帮助别人给出更有针对性的答案。