我使用pythonsql来编辑一个非常简单的表,名为 students
(其列是 name
以及 age
),如下图:
('Rachel', 22)
('Linckle', 33)
('Bob', 45)
('Amanda', 25)
('Jacob', 85)
('Avi', 65)
('Michelle', 45)
我正在定义python函数来执行sql代码。
在我的第一个函数中,我想更新 age
中的值 students
table在哪里 name
匹配某物(如鲍勃)。如果我定义以下函数:
def update_age(age, name):
c.execute("""UPDATE students SET age = %s
WHERE name = %s""", (age, name))
然后:
update_age(99, 'Bob')
我会得到:
('Rachel', 22)
('Linckle', 33)
('Bob', 99)
('Amanda', 25)
('Jacob', 85)
('Avi', 65)
('Michelle', 45)
在第二个函数中,我还要指定表的名称,代码如下:
def update_age_table(table, age, name):
c.execute("""UPDATE %s SET age = %s
WHERE name = %s""",
(table, age, name)) # note that here I am only replacing students by the placeholder %s
如果我这么做了:
update_age_table(table='students', age=95, name='Jacob')
我将收到以下错误消息(很长,我只显示最后一句话:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''students' SET age = 95
WHERE name = 'Jacob'' at line 1
我猜这个错误是因为我给变量分配了两个占位符,即 age
以及 name
,这不是表名的情况,表名中没有变量赋值。
有人知道我如何在sql命令中使用占位符而不将它们赋给变量吗?
1条答案
按热度按时间hsvhsicv1#
那个ś 因为在execute语句中不能将表名作为参数传递。你应该这样做:
prepared语句不适用于表名
编辑必须删除如下表参数:
抱歉是个错误