所以我已经看过文档和其他问题,但我没有运气。
当我运行c.execute并且使用值编码的第一个%s时,它可以工作。然而,如果我试图让它成为变量,我就没有结果。根据我的理解,我使用%s作为占位符,然后将这些变量的列表作为第二个参数传递。我错过了什么吗?在这种情况下,来自db_connect的游标是conn.cursor(cursors.DictCursor),因为我想要一个结果字典。无论哪种方式,我在a或b中都没有得到任何结果,但是如果我用" SELECT * FROM users运行相同的查询,其中username =%s",那么我得到一个结果。
from MySQLdb import escape_string
from db_connect import connection
import gc
def get_user(parameter, value):
c, conn = connection(dict_cursor = True)
data = c.execute("SELECT * FROM users where %s = %s",[escape_string(parameter), escape_string(value)])
data = c.fetchone()
conn.close()
gc.collect()
return data
a = get_user("username","testuser")
b = get_user("email","testuser@icloud.com")
c = get_user("username","doesntexist")
答案 0 :(得分:2)
我错过了什么吗?
是。您可以使用参数替换查询中的常量。但是,您无法替换标识符。这包括:
您可以做的是用字符串替换替换列名,然后将比较值作为参数传递。