Python mysql cursor.execute() 有问题吗?

Python mysql cursor.execute() have issues?

我在使用 Python3.4.

从我的 MySQL 数据库获取数据时遇到了一些问题

这是我的代码:

connection = pymysql.connect(host='localhost',
                             user='root',
                             password=MY_PASSWD,
                             db=MY_DB,
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)

with connection.cursor() as cursor:
    # it doens't works works
    table_name = 'id_pw'
    key_name = 'url'
    key_value = 'naver.com'
    sql = "SELECT * FROM %s WHERE %s=\'%s\'"
    cursor.execute(sql, (table_name, key_name, key_value))

    # it works.
    sql = "SELECT * FROM id_pw WHERE url=\'naver.com\'"
    cursor.execute(sql)

你能告诉我哪里出了问题吗?我不知道我错过了什么。

无法参数化 table 或列名称,为此使用字符串格式并为其他所有内容使用查询参数:

sql = "SELECT * FROM {table} WHERE {column} = %s".format(table=table_name, column=key_name)
cursor.execute(sql, (key_value, ))

请注意,您也不需要在占位符周围加上引号 - 数据库驱动程序会自动处理。

另外,请注意,请确保您信任 table_namekey_name 的来源,或者 validate/escape 它们。由于我们正在引入的字符串格式,请确保您的代码不易受到 SQL 注入的攻击。