【问题标题】:Python: Passing list in sql query as parametersPython:将 sql 查询中的列表作为参数传递
【发布时间】:2019-01-02 17:38:00
【问题描述】:

我有以下查询:

import jaydebeapi,pandas as pd

cursor = conn.cursor()
cursor.execute('''INSERT INTO MD SELECT DISTINCT MD FROM viewshareddim.TMD_VIP
WHERE STN_ID=? AND P_T in ? AND ID in ? AND C_ID = ?''', (MD[0],MD[1],MD[2],MD[3]))

值是:

MD = [01,(02,05,06),(02,04,05),8]

试图参考python list 此处提供的解决方案,但不知道如何为我的查询实施解决方案。如果可以提供任何指导,将不胜感激。

试过这个:

INSERT INTO MD SELECT DISTINCT MD FROM viewshareddim.TMD_VIP
WHERE STN_ID=(?) AND P_T in (?) AND ID in (?) AND C_ID = (?), (MD[0],MD[1],MD[2],MD[3])


File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site- 
 packages/jaydebeapi/__init__.py", line 499, in execute
self._set_stmt_parms(self._prep, parameters)
File 
"/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/jaydebeapi/__init__.py", line 490, in _set_stmt_parms
prep_stmt.setObject(i + 1, parameters[i])
RuntimeError: No matching overloads found for setObject in find. at 
native/common/jp_method.cpp:127

【问题讨论】:

  • 尝试在IN 参数周围加上括号? AND P_T in (?) AND ID in (?)
  • 我尝试了您的建议,但出现错误。已在上面的主要问题中发布了结果。
  • 您的哪些参数不起作用?此外,C_ID = ?, (MD[0],MD[1],MD[2],MD[3]) 不是任何类型的有效 SQL。
  • 您能否提供更多产生此错误的 Python 代码来帮助构建问题?

标签: python sql teradata


【解决方案1】:

我尝试对列表进行评估,因此当它传递到数据库时,它只是一个要由数据库执行的字符串

【讨论】:

  • 绝对不要这样做。有关原因的详细信息,请查看 sql 注入攻击。
  • 同意,我应该说明这一点,但是对于调试,它可能有助于查看发送到数据库的方式/内容。
猜你喜欢
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多