Python 为什么此类型的变量是可选的。。。?

Python 为什么此类型的变量是可选的。。。?,python,mysql,Python,Mysql,我很困惑——我已经写了很多次相同的代码,但从来没有遇到过这个问题。我对python的了解并不超过自学成才的内容,即为我的iOS应用程序使用flask框架构建rest api。当我调用api来检索这个特定路径的一些数据时,MySQL不断返回“error”,因为出于某种原因,我传递的变量是作为可选类型传递的(我认为?-b/z因为print语句打印:optional(1)) 有人能解释一下这是怎么回事吗?为什么同样的代码在我的其他路径中运行良好?我甚至试着把它当作一根弦来演奏。在我的iOS应用程序中进

我很困惑——我已经写了很多次相同的代码,但从来没有遇到过这个问题。我对python的了解并不超过自学成才的内容,即为我的iOS应用程序使用flask框架构建rest api。当我调用api来检索这个特定路径的一些数据时,MySQL不断返回“error”,因为出于某种原因,我传递的变量是作为可选类型传递的(我认为?-b/z因为print语句打印:optional(1))

有人能解释一下这是怎么回事吗?为什么同样的代码在我的其他路径中运行良好?我甚至试着把它当作一根弦来演奏。在我的iOS应用程序中进行api调用的函数也只接受字符串作为参数……使用硬编码值运行MySQL查询总是有效的

*****thwart是我重新命名的MySQLdb escape_string*****

查询功能:

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()