【问题标题】:遍历列表 Python SQL
【发布时间】:2022-01-23 16:23:21
【问题描述】:

我正在尝试通过遍历搜索值列表来搜索数据库。我快到了,因为这适用于整数,但不适用于字符串。下面的代码不起作用,但如果我用数字替换列表值,它会起作用:

mycursor = mydb.cursor()

lst = []

select_query = "SELECT * FROM fruit WHERE content LIKE "
ids = ["apple", "pear"]

for x in ids:
    var = select_query + str(x)
    
    mycursor.execute(var)
    lst.extend(mycursor.fetchall())

print(lst)

【问题讨论】:

  • 更喜欢使用下面答案中的准备好的语句,而不是使用可能导致 SQL 注入攻击漏洞的连接。
  • 您想用LIKE 选择什么? content 完全等于 'apple' 或包含关键字 %apple% 的所有水果也匹配 'pineapple' ?为什么不WHERE content IN ('apple', 'pear")

标签: python sql


【解决方案1】:

这是因为你必须在 SQL 中将字符串括在引号中。比如

SELECT * FROM fruit WHERE content LIKE 'pears'

会起作用,而且它只适用于“梨”周围的单引号。更好的是,类型转换可以(并且应该)使用 psycopg2 自动完成:

select_query = "SELECT * FROM fruit WHERE content LIKE %s"
...
mycursor.execute(select_query, (x,))

https://www.psycopg.org/docs/usage.html#strings-adaptation

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 2018-03-08
    • 2015-10-07
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多