当前位置: 首页 > 面试题库 >

将参数传递给DB .execute以获取WHERE IN…INT列表

东明德
2023-03-14
问题内容

使用Python的DB API规范,您可以将参数的参数传递给execute()方法。我的语句的一部分是WHERE
IN子句,并且我一直在使用元组填充IN。例如:

params = ((3, 2, 1), )
stmt = "SELECT * FROM table WHERE id IN %s"
db.execute(stmt, params)

但是,当我遇到参数元组只是1个项目的元组的情况时,执行将失败。

编程错误:错误:“)”或附近的语法错误。第
13行:ID为(3,)的WHERE

我怎样才能使元组正确地使用子句?


问题答案:

编辑:请,正如@rspeer在评论中提到的那样,请务必采取预防措施以保护自己免受SQL注入攻击

使用pg8000(与PostgreSQL数据库引擎的DB-API
2.0兼容的Pure-Python接口)进行测试:

这是将多个参数传递给“ IN”子句的推荐方法。

params = [3,2,1]
stmt = 'SELECT * FROM table WHERE id IN (%s)' % ','.join('%s' for i in params)
cursor.execute(stmt, params)

另一个编辑(经过充分测试且有效的示例):

>>> from pg8000 import DBAPI
>>> conn = DBAPI.connect(user="a", database="d", host="localhost", password="p")
>>> c = conn.cursor()
>>> prms = [1,2,3]
>>> stmt = 'SELECT * FROM table WHERE id IN (%s)' % ','.join('%s' for i in prms)
>>> c.execute(stmt,prms)
>>> c.fetchall()
((1, u'myitem1'), (2, u'myitem2'), (3, u'myitem3'))


 类似资料:
  • 问题内容: 是否可以使用反射API将参数传递给Java中的方法? 是否可以使用诸如AspectJ之类的AOP库来实现这一目标? 我在Android上运行。 。 问题答案: 是否可以使用诸如AspectJ之类的AOP库来实现这一目标? 当然可以。这是AspectJ中典型的初学者练习,如下所示: 现在,您只需要编写一个方面即可拦截所有方法执行(以及可选的构造函数执行,如下所示): 运行时,此方面将打印

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 问题内容: 以下代码的输出是因为从beginIndex到EndIndex-1。但是,令我惊讶的是这里的3(int)因为是两个整数。这背后的概念是什么? 问题答案: 一直到C,从本质上讲是一个窄整数类型,并在需要时隐式转换为C。 在Java中,这在技术上称为“扩展原始转换”,在JLS的5.1.2节中进行了介绍。

  • 问题内容: 我想在我的课程中传递默认参数,但是不知何故我遇到了问题: 如果现在尝试实例化,则会出现以下错误: 我究竟做错了什么? 问题答案: 从该文档: 要使用的参数是: default_factory: 如果提供, 则必须为零参数可调用对象 ,当此字段需要默认值时将被调用。除其他用途外,这可用于指定具有可变默认值的字段,如下所述。同时指定default和default_factory是错误的。

  • 问题内容: 赋予以下功能: 如何在 不自己构建结构的情况下获得 传入参数的列表/元组/ dict / etc ? 具体来说,我在寻找Python版本的JavaScript关键字或PHP方法。 我 不 想要的是使用or的解决方案。我需要在函数定义中指定参数名称(以确保将其传递),但是在函数中,我想以列表或dict样式的结构使用它们。 问题答案: 您可以用来获取函数中局部变量的字典,如下所示: 但是,