Python中带有悬挂逗号的WHERE子句

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (39)

我正在W3school上学习 Python教程。

mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address LIKE %s"
adr = ("Yellow Garden 2", )        // I don't understand this part!!!

mycursor.execute(sql, adr) 

myresult = mycursor.fetchall()

for x in myresult:
    print(x)

如果我运行上面的代码,我得到以下结果。

但是当我在逗号后删除空格时,我收到错误。 adr = ("Yellow Garden 2", )- >adr = ("Yellow Garden 2" )

1)我想知道为什么我需要逗号之后的空格。

2)为什么我也需要一个支架()?(当我删除括号时,我也会收到错误。)喜欢adr = "Yellow Garden 2"

提问于
用户回答回答于
adr = ("Yellow Garden 2", )

这定义adrtuple具有单个元素。您可以验证:

type(adr)

应该:

<class 'tuple'>

当你删除逗号,(它是导致它的逗号,而不是空格)时,adr变成一个简单的字符串:

adr = ("Yellow garden 2")
type(adr)

应该:

<type 'str'>

MySQL API期望将a tuple作为参数传递,因此错误。这(soemthing,)就是你如何在python中定义单元素元组。

用户回答回答于

发生这种情况是因为该示例使用元组(...,)传递 值adr =(“Yellow Garden 2”)是一个包含单个值的元组

如果你需要只是字符串你coudl尝试

sql = "SELECT * FROM customers WHERE address LIKE concat('%', %s, '%')"

adr = "Yellow Garden 2"
mycursor.execute(sql, adr)  

要么

mycursor.execute(sql, "Yellow Garden 2") 

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励