当出现要大量数据去查询时,不要一个个去SQL查询,应该要批量的去查询。
def batch_cavity_query(self, fuseids):
"""批量查询cavity信息"""
if not fuseids:
return {}
# 创建临时表批量查询
try:
# 创建临时表
self.cursor.execute("CREATE TABLE #TempFuseIDs (fuseid VARCHAR(100))")
# 批量插入数据
self.cursor.executemany("INSERT INTO #TempFuseIDs VALUES (%s)", [(fid,) for fid in fuseids])
query = """
SELECT
DA.qrc_fuseid,
C.Barcode AS QRcode,
L.qrc_fuseid AS LensData_FuseID,
C.Cavity
FROM #TempFuseIDs temp
LEFT JOIN A DA
ON temp.fuseid = DA.qrc_fuseid
LEFT JOIN B L
ON DA.qrc_QRcode = L.qrc_QRcode
LEFT JOIN C C
ON L.qrc_fuseid = C.Barcode
"""
self.cursor.execute(query)
results = self.cursor.fetchall()
# 构建映射字典
cavity_map = {}
for row in results:
fuseid = row[0]
cavity_map[fuseid] = (row[1], row[2], row[3])
return cavity_map
finally:
self.cursor.execute("DROP TABLE #TempFuseIDs")
python
def batch_query_sn(self, fuseids):
"""批量查询SN相关信息"""
if not fuseids:
return {}
try:
# 创建临时表
self.cursor.execute("CREATE TABLE #TempFuseIDs (fuseid VARCHAR(100))")
self.cursor.executemany("INSERT INTO #TempFuseIDs VALUES (%s)", [(fid,) for fid in fuseids])
query = """
SELECT
temp.fuseid,
eqp_name,
station_code,
TRY_CAST(testres_main_test_recordposition3_ut_z AS FLOAT) -
TRY_CAST(testres_main_test_recordposition2_ut_z AS FLOAT) AS offset,
time
FROM #TempFuseIDs temp
LEFT JOIN D AA
ON AA.sensor_id = temp.fuseid
"""
self.cursor.execute(query)
results = self.cursor.fetchall()
sn_map = {}
for row in results:
fuseid = row[0]
sn_map[fuseid] = (row[1], row[2], float(row[3]) if row[3] else 0, row[4])
return sn_map
finally:
self.cursor.execute("DROP TABLE #TempFuseIDs")