gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:09:42 24 4
gpt4 key购买 nike

我有以下 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 是用户来源的,您最好的选择是首先根据现有表名的预先确定的列表对其进行审查。

关于python变量在字符串中插入单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22254576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com