【发布时间】:2020-02-24 17:10:05
【问题描述】:
我传递了大约 80k 个参数,但在执行查询时,pyodbc 或 SQL 似乎正在截断参数总数。当我传递大约 2k 个参数但超过 2k 的参数失败时,它可以工作。以下是我的疑问,非常感谢您的帮助。
contact_lst = df_attempt_filtered['Contact ID'].unique()
len(contact_lst) ### Prints: 80871
query_contact = """
SELECT DISTINCT
con.CONTACT_ID,
con.JOB_ROLE,
con.JOB_FUNCTION,
con.MAIN_PHONE_NUM,
con.WORK_PHONE_NUM,
con.MOBILE_PHONE_NUM,
acc.EMPLOYEE_COUNT AS "EmpSize"
FROM
V_S_CONTACT_w_MOBILE_NUM AS con
LEFT JOIN
V_S_ACCOUNT_ALL_w_others as acc
ON CON.ACCOUNT_ID = ACC.ACCT_ID
WHERE
con.CONTACT_ID IN ({})""".format(", ".join(["?"]*len(contact_lst)))
df_contacts = pd.read_sql(query_contact, con=conn, params=contact_lst)
我收到以下错误:
ProgrammingError: ('SQL 包含 15335 个参数标记,但提供了 80871 个参数', 'HY000') 在处理上述异常的过程中,又出现了一个异常:
【问题讨论】:
-
“我传递了大约 80k 个参数” 你的问题。使用临时表/表变量。具有 80,000 个值的
IN[可能会杀死您的实例。 -
这能回答你的问题吗? maximum number of parameters in sql query
-
使用表值参数提供 80k 值 - pyodbc 示例 github.com/mkleehammer/pyodbc/blob/…
-
老实说,您需要 80,000 个参数这一事实本身似乎是一个 XY 问题。
标签: sql-server python-3.x pandas pyodbc