我有下面的代码,我知道我可能很接近,但我仍然收到我已经超过 1000 的错误。
我添加了generate_sql_in_binds函数,但我想我不知道如何正确传递它。
from datetime import datetime
hour_dt = tuple(datetime.strptime(value, "%m/%d/%Y %H:%M") for value in hour)
def generate_sql_in_binds(
name: str,
size: int,
start: int = 1,
max_binds: int = 1000,
) -> str:
in_clauses = (
"{name} IN ({binds})".format(
name=name,
binds=",".join(
(
f":{b+start}"
for b in range(i, min(i+max_binds,size))
)
)
)
for i in range(0, size, max_binds)
)
return "(" + (" OR ".join(in_clauses)) + ")"
query = """SELECT HOUR, UNITSCHEDULEID, VERSIONID, MINRUNTIME
FROM int_Stg.UnitScheduleOfferHourly
WHERE Hour in ({hour_binds})
AND UnitScheduleId in ({id_binds})""".format(
hour_binds=",".join((f":{idx}" for idx, _ in enumerate(hour, 1))),
id_binds=",".join((f":{idx}" for idx, _ in enumerate(unitid, len(hour) + 1))),
)
res = connection.cursor().execute(query, (*hour_dt, *unitid)).fetchall()
print(res)
这里需要更多关于“小时”和“unitid”列表的上下文。然而,最好的方法是将它们保存在数据库的另一个表中。如果您担心使用联接的性能,您还可以在需要的地方添加子查询。示例:
query = """SELECT HOUR, UNITSCHEDULEID, VERSIONID, MINRUNTIME
FROM int_Stg.UnitScheduleOfferHourly
WHERE Hour in (select hour in hours_table)
AND UnitScheduleId in (select unitid from unitids_table)"""