gpt4 book ai didi

python - python mysql中表名的占位符

转载 作者:行者123 更新时间:2023-11-30 21:35:26 26 4
gpt4 key购买 nike

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

('Rachel', 22)
('Linckle', 33)
('Bob', 45)
('Amanda', 25)
('Jacob', 85)
('Avi', 65)
('Michelle', 45)

我正在定义 python 函数来执行 SQL 代码。

在我的第一个函数中,我想更新 students 表中的 age 值,其中 name 匹配某些内容(例如 Bob)。如果我定义以下函数:

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 命令中使用占位符?

最佳答案

那是因为您不能在执行语句中将表名作为参数传递。你应该这样做:

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

对不起,我错了

关于python - python mysql中表名的占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54113887/

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