字符串中插入单引号的python变量

字符串中插入单引号的python变量,python,mysql,Python,Mysql,我有以下python代码: insert_table = settings.INSERT_TABLE_NAME self.execute( """ INSERT INTO `%(insert_table)s` (time, rem_host, username, our_result, upstream_result, reason, solution, difficulty)

我有以下python代码:

insert_table = settings.INSERT_TABLE_NAME

        self.execute(
            """
            INSERT INTO `%(insert_table)s`
            (time, rem_host, username, our_result,
              upstream_result, reason, solution, difficulty)
            VALUES
            (FROM_UNIXTIME(%(time)s), %(host)s,
              %(uname)s,
              %(lres)s, 'N', %(reason)s, %(solution)s, %(difficulty)s)
            """,
            {
                "insert_table": insert_table,
                "time": v[4],
                "host": v[6],
                "uname": v[0],
                "lres": v[5],
                "reason": v[9],
                "solution": v[2],
                "difficulty": v[3]
            }
        )
我遇到的问题是,SQL查询的结果在'insert_table'变量周围包含单引号,因此结果是:

INSERT INTO `'my_table_name'`
因此,它显然打破了这个疑问


有人对如何正确配置这个有什么建议吗

不能使用SQL参数插入表名。这些部分必须使用经典的字符串格式

这就是SQL参数的要点;它们引用值,因此不能解释为SQL语句或对象名

以下方法可行,但需要注意表名的来源:

"""
INSERT INTO `{}`
(time, rem_host, username, our_result,
  upstream_result, reason, solution, difficulty)
VALUES
(FROM_UNIXTIME(%(time)s), %(host)s,
  %(uname)s,
  %(lres)s, 'N', %(reason)s, %(solution)s, %(difficulty)s)
""".format(insert_table),
{
    "time": v[4],
    "host": v[6],
    "uname": v[0],
    "lres": v[5],
    "reason": v[9],
    "solution": v[2],
    "difficulty": v[3]
}

如果
insert_table
是用户源代码,您最好先根据预先确定的现有表名列表对其进行检查。

谢谢!它就像一个符咒。我不担心表名的来源,因为它是硬编码和安全的。不是从用户输入派生的:)