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

发布于 2021-01-29 14:58:22

使用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

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

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    编辑:请,正如@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'))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看