python mysql

时间:2019-01-09 15:56:40

标签: mysql python-3.x placeholder

我正在使用python sql编辑一个名为students(其列为nameage的非常简单的表),如下所示:

('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

我猜这是由于我将两个占位符分配给变量agename而引起的,而事实并非如此。表名,没有变量分配。

有人知道我如何在SQL命令中使用占位符而不将它们分配给变量吗?

1 个答案:

答案 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)) #

对不起是个错误