我正在使用python sql编辑一个名为students
(其列为name
和age
的非常简单的表),如下所示:
('Rachel', 22)
('Linckle', 33)
('Bob', 45)
('Amanda', 25)
('Jacob', 85)
('Avi', 65)
('Michelle', 45)
我正在定义python函数来执行SQL代码。
在我的第一个函数中,我想更新age
表中students
与某项(例如Bob)匹配的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命令中使用占位符而不将它们分配给变量吗?
答案 0 :(得分:0)
那是因为您不能在执行语句中将表名作为参数传递。您应该这样:
def update_age_table(table, age, name):
c.execute("UPDATE "+table+" SET age = %s
WHERE name = %s",
(table, age, name)) #
准备好的语句不适用于表名
编辑 您必须这样删除表参数:
def update_age_table(table, age, name):
c.execute("UPDATE "+table+" SET age = %s WHERE name = %s",(age, name)) #
对不起是个错误