首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中带有悬空逗号的Where子句

Python中带有悬空逗号的Where子句
EN

Stack Overflow用户
提问于 2019-05-20 13:33:33
回答 3查看 111关注 0票数 2

我在W3school上学习Python教程。

代码语言:javascript
复制
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"一样

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-20 13:44:39

代码语言:javascript
复制
adr = ("Yellow Garden 2", )

这将adr定义为只有一个元素的tuple。您可以使用以下命令进行验证:

代码语言:javascript
复制
type(adr)

应该是:

代码语言:javascript
复制
<class 'tuple'>

当您删除逗号, (是逗号引起的,而不是空格)时,adr将变成一个简单的字符串:

代码语言:javascript
复制
adr = ("Yellow garden 2")
type(adr)

应该是:

代码语言:javascript
复制
<type 'str'>

MySQL应用程序接口要求将tuple作为参数传递,因此出现错误。(soemthing,)就是您在python中定义单元素元组的方式。

票数 5
EN

Stack Overflow用户

发布于 2019-05-20 13:44:49

这个答案是基于this blog post的。execute的第二个参数是一个元组,需要一个悬空逗号,但前提是元组中只有一个元素。正如博客所讨论的,悬空逗号需要区分:

代码语言:javascript
复制
("Yellow Garden 2",)

元组,来自:

代码语言:javascript
复制
("Yellow Garden 2")

文字字符串表达式。或者,至少(1)对于您想让它成为元组还是算术表达式是不明确的。

但是,在有两个或更多参数的情况下,悬空逗号应该是可选的,例如

代码语言:javascript
复制
sql = "SELECT * FROM customers WHERE address LIKE %s OR address LIKE %s"
adr = ("Yellow Garden 1", "Yellow Garden 2")
mycursor.execute(sql, adr)

编辑:

我还要补充的是,在这里使用元组中的悬空逗号可能是最佳的编程实践。为什么?假设您编写了一些代码,这些代码最初使用了一个包含两个元素的元组。从技术上讲,您不需要悬空逗号。但是,在未来,有人可能会重构并删除一个元素。如果您没有包含悬空逗号,那么代码可能会崩溃。

票数 2
EN

Stack Overflow用户

发布于 2019-05-20 13:43:27

这是因为该示例使用元组( ...,)传递值

值adr =(“黄色花园2",)是包含单个值元组

如果你只需要字符串,你可以试试

代码语言:javascript
复制
sql = "SELECT * FROM customers WHERE address LIKE concat('%', %s, '%')"

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

代码语言:javascript
复制
mycursor.execute(sql, "Yellow Garden 2") 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56214779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档