如何在Python中自动获取SQL数据库对应设备的最新批次runnumber并查询数据
自动获取设备最新runnumber的两种解决方案
我来帮你解决这个手动输入runnumber的麻烦!有两种简洁的方法可以实现自动获取对应设备的最新(最大)runnumber,完全不用手动查询和输入:
方法一:直接在SQL中嵌套最大值查询(推荐)
这种方法不需要额外的Python中间步骤,直接让数据库帮你计算并匹配最大值,一次查询就能拿到目标数据:
df = pd.read_sql(f""" Select time, temp from datatable where machineid=84207 and runnumber=(Select Max(runnumber) from datatable where machineid=84207) """, conn)
原理很简单:WHERE子句里的runnumber=(...)部分会先执行内部的子查询,算出对应machineid的最大runnumber,再用这个值筛选主查询的数据。
方法二:先获取最大值再代入查询
如果你更倾向于先拿到最大值再单独处理,只需要从你查询到的DataFrame里提取具体数值即可。你之前的代码拿到的pp1是一个DataFrame,需要用索引取出里面的数值:
# 先查询对应设备的最大runnumber,给结果起个清晰的别名 pp1 = pd.read_sql(f"Select Max(runnumber) as max_run from datatable where machineid=84207", conn) # 提取DataFrame里的具体数值 max_run_number = pp1['max_run'].iloc[0] # 代入到查询语句中 df = pd.read_sql(f"Select time, temp from datatable where machineid=84207 and runnumber={max_run_number}", conn)
批量处理多台设备的小技巧
既然你需要处理多台设备,推荐把所有machineid放到列表里循环处理,避免重复写代码:
# 把需要处理的设备ID都放在这里 target_machines = [84207, 84208, 84209] # 用字典存储每个设备的最新数据 machine_data_dict = {} for machine_id in target_machines: # 用方法一的嵌套SQL,自动获取当前设备的最新runnumber数据 current_df = pd.read_sql(f""" Select time, temp from datatable where machineid={machine_id} and runnumber=(Select Max(runnumber) from datatable where machineid={machine_id}) """, conn) machine_data_dict[machine_id] = current_df # 之后可以通过machine_data_dict[84207]快速获取对应设备的最新数据
这样不管新批次数据怎么更新,代码都会自动拉取每个设备的最新runnumber对应的数据集,完全不用手动干预啦!
内容的提问来源于stack exchange,提问作者elduque
相关产品推荐
相关产品推荐

