变量hour的长度是792,uitid是15,所以都低于1000,所以我不知道为什么会收到这个错误,我尝试了两种方法,如下所示:
第一种方式:
query = """SELECT HOUR, UNITSCHEDULEID, VERSIONID, MINRUNTIME
FROM int_Stg.UnitScheduleOfferHourly
WHERE Hour in (to_date({hour_binds}), 'dd-mon-yyyy hh24')
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, *unitid)).fetchall()
print(res)
第二
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 (to_date({hour_binds}), 'dd-mon-yyyy hh24')
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, *unitid)).fetchall()
print(res)
这看起来很可疑:
WHERE Hour in (to_date({hour_binds}), 'dd-mon-yyyy hh24')
格式掩码应该是
to_date
函数的一部分,即
WHERE Hour in (to_date({hour_binds}, 'dd-mon-yyyy hh24'))