python - 如何更好地使用数据框中的值构造 SQL 语句?
问题描述
考虑以下 SQL 语句:
q="SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN (700,701,702...)"
括号中的值应来自数据框:
df=pd.DataFrame({"H_ID":[701,702,703,704,705,706,707,708,709,710],"B":[0,0,0,0,0,0,1,1,2,2], "C":[4,3,3,3,2,2,2,1,1,2]})
此刻,我在做什么?
#convert H_ID column to a string separated by comma
my_ids = str(list(df["H_ID"].apply(lambda x : str(x)))).replace("[","").replace("]","")
我将它添加到我的查询中:
q="SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN ("+my_ids+")"
问题:有没有更好的方法通过避免转换为字符串来做到这一点?
解决方案
代码:
import pandas as pd
import numpy
df=pd.DataFrame({"H_ID":[701,702,703,704,705,706,707,708,709,710],"B":[0,0,0,0,0,0,1,1,2,2], "C":[4,3,3,3,2,2,2,1,1,2]})
s = ', '.join(map(str, df['H_ID'].as_matrix()))
q = 'SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN ({})'.format(s)
print(q)
输出:
SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN (701, 702, 703, 704, 705, 706, 707, 708, 709, 710)
推荐阅读
- python - 有没有办法在 Maya 的参考编辑器中自动更改未解析的名称?
- javascript - 如何在带有本机反应的平面列表中显示具有动态名称的数组数据列表?
- python - 如何将 Python3.4 与 Anaconda 一起使用?
- javascript - 将 javascript 对象从一种形式转换为另一种形式
- reactjs - 错误:无效的挂钩调用。Hooks 只能在函数组件的主体内部调用
- amazon-web-services - 为什么 AWS EC2 实例身份验证一直停止工作(可能是会话)?
- reactjs - Redux vs Hooks/Context API vs ApolloClient
- matrix - 变换后如何计算屏幕坐标?
- visual-studio-code - 在哪里定义一个共享的problemMatcher来检查终端?
- r - 你如何在 ubuntu 上运行 R 文件?