【发布时间】:2012-07-06 23:30:16
【问题描述】:
如何在 Python3 中将输入转义到 MySQL 数据库? 我正在使用 PyMySQL 并且工作正常,但是当我尝试执行以下操作时:
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = '{}'".format(request[1]))
如果字符串有' 或",它将不起作用。我也试过了:
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = %s",request[1])
问题在于库 (PyMySQL) 使用 Python2.x 的格式化语法 %,这不再有效。
我也找到了这个可能的解决方案
conn.escape_string()
在here,但我不知道在哪里添加这段代码。 这就是我得到的全部:
import pymysql
import sys
conn = pymysql.connect( host = "localhost",
user = "test",
passwd = "",
db = "test")
cursor = conn.cursor()
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = {}".format(request[1]))
result = cursor.fetchall()
cursor.close()
conn.close()
编辑:我解决了!在 PyMySQL 中正确的做法是这样的:
import pymysql
import sys
conn = pymysql.connect(host="localhost",
user="test",
passwd="",
db="test")
cursor = conn.cursor()
text = conn.escape(request[1])
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = {}".format(text))
cursor.close()
conn.close()
text = conn.escape(request[1]) 行是转义代码的地方。在 PyMySQL 代码中找到它。在那里,request[1] 是输入。
【问题讨论】:
-
酷。不过,您应该发布问题的后半部分作为答案。您可以接受自己的答案。
-
糟糕,我之前没看到那个按钮。
-
如果已解决,则将您自己的问题标记为已接受。 :-)
-
@Jocelyn 它告诉我“你可以在 11 小时内接受你自己的答案”,所以我稍后再试。
标签: mysql sql python-3.x pymysql