我很困惑 - 我已經多次編寫相同的代碼,從來沒有這個問題。我對python的瞭解並沒有遠遠超出自我教導的東西,爲我的iOS應用程序構建一個rest框架。當我讓我的api調用來檢索這個特定路徑的一些數據時,MySQL不斷返回'錯誤',因爲由於某種原因,我傳遞的變量被作爲可選類型傳遞(我想--b/coz print語句打印:可選(1))爲什麼這個變量的類型可選...?
有人可以解釋這裏發生了什麼嗎?爲什麼這個相同的確切代碼在我的其他路徑中工作正常?我甚至嘗試將它作爲一個字符串。在我的iOS應用中使api調用的函數只接受一個字符串作爲參數......運行帶有硬編碼值的MySQL查詢總是有效的。
*****座板是我改名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("inside check answers path")
json = request.get_json()
gameId = str(json["gameId"])
data = checkAnswers(gameId)
print("answer data ----->")
print(data)
檢查'checkAnswers'函數中'thwart(id)'的值。當你這樣做的時候,請改變你的代碼來使用'execute'方法的第二個參數,而不要在'%'中使用字符串格式。你的方式來打開一個巨大的安全漏洞。 – Matthias
@matthias thwart(id)也打印可選(1),就像print(gameId)一樣。我不確定如何在不使用%的字符串格式的情況下執行此操作。感謝您的反饋至今 – user7804097
關於主要問題:'thwart'似乎是您的功能。你應該知道它會返回什麼並獲得你真正想要的價值。關於'execute'的第二個參數:[閱讀'execute'的文檔](https://www.python.org/dev/peps/pep-0249/#id15) – Matthias