Python 为什么此类型的变量是可选的。。。?
我很困惑——我已经写了很多次相同的代码,但从来没有遇到过这个问题。我对python的了解并不超过自学成才的内容,即为我的iOS应用程序使用flask框架构建rest api。当我调用api来检索这个特定路径的一些数据时,MySQL不断返回“error”,因为出于某种原因,我传递的变量是作为可选类型传递的(我认为?-b/z因为print语句打印:optional(1)) 有人能解释一下这是怎么回事吗?为什么同样的代码在我的其他路径中运行良好?我甚至试着把它当作一根弦来演奏。在我的iOS应用程序中进行api调用的函数也只接受字符串作为参数……使用硬编码值运行MySQL查询总是有效的 *****thwart是我重新命名的MySQLdb escape_string***** 查询功能:Python 为什么此类型的变量是可选的。。。?,python,mysql,Python,Mysql,我很困惑——我已经写了很多次相同的代码,但从来没有遇到过这个问题。我对python的了解并不超过自学成才的内容,即为我的iOS应用程序使用flask框架构建rest api。当我调用api来检索这个特定路径的一些数据时,MySQL不断返回“error”,因为出于某种原因,我传递的变量是作为可选类型传递的(我认为?-b/z因为print语句打印:optional(1)) 有人能解释一下这是怎么回事吗?为什么同样的代码在我的其他路径中运行良好?我甚至试着把它当作一根弦来演奏。在我的iOS应用程序中进
def checkAnswers(gameId):
print("inside check answers function")
print(gameId)
id = str(gameId)
c, conn = connection()
data = c.execute("SELECT answer_one, answer_two FROM games WHERE game_id='%s'" % (thwart(id)))
if data:
return c.fetchall()
return "error"
在main.py文件的正确路径下,我有以下代码片段:(print(data)总是打印'error')
execute
没有返回值,检查它没有任何意义,只需检查fetchall
的空结果:
def checkAnswers(gameId):
print("inside check answers function")
print(gameId)
id = str(gameId)
c, conn = connection()
c.execute("SELECT answer_one, answer_two FROM games WHERE game_id=%s", (thwart(id),))
return c.fetchall()
这最终成为一个xcode bug[将所有iOS/xcode侮辱排队]。尽管我在xcode中正确地将变量转换为字符串,但它是作为可选项发送的……我所做的只是清理项目代码并重新启动xcode,它按预期工作。。。。。3个小时后,我头痛。多好的解决办法
感谢所有对此做出贡献的人,因为这基本上是一个无法回答的问题。在
checkAnswers
函数中检查thwart(id)
的值。执行此操作时,请更改代码以使用execute
方法的第二个参数,并且不要将字符串格式设置为%
。你这样做会打开一个巨大的安全漏洞。@matthias thwart(id)也是可选打印(1),就像打印(gameId)一样。我不确定如何在没有%字符串格式的情况下执行此操作。感谢您对主要问题的反馈:thwart
似乎是您的职责。您应该知道它返回什么,并获得您真正想要的值。关于execute
的第二个参数:如果您使用的是sqlite,文档就在那里:thwart()是什么?
?我的印象是它基本上会返回bool值。因此,如果它是一个失败的查询,它将命中“错误”消息。我在其他api调用中使用了这个逻辑,它可以按预期工作@Daniel@user7804097:Python中的大多数函数和方法不使用其返回值来表示成功与失败。如果某个东西失败了,他们只会引发一个异常。而且这也不起作用。它返回的是一个空集,因为它仍在使用可选变量类型进行搜索
def checkAnswers(gameId):
print("inside check answers function")
print(gameId)
id = str(gameId)
c, conn = connection()
c.execute("SELECT answer_one, answer_two FROM games WHERE game_id=%s", (thwart(id),))
return c.fetchall()