заполнители для имен таблиц в Python MySQL - PullRequest
0 голосов
/ 09 января 2019

Я использую python sql для редактирования очень простой таблицы с именем students (столбцы которой name и age), как показано ниже:

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

Я определяю функции python для выполнения кода SQL.

В моей первой функции я хочу обновить значения age в таблице students, где 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 Ответ

0 голосов
/ 09 января 2019

Это потому, что вы не можете передать имя таблицы в качестве параметра в предложении выполнения. Вы должны сделать это так:

def update_age_table(table, age, name):
    c.execute("UPDATE "+table+" SET age = %s
    WHERE name = %s", 
             (table, age, name)) #

Подготовленный оператор не работает для имен таблиц

EDIT Вы должны удалить параметр таблицы следующим образом:

def update_age_table(table, age, name):
    c.execute("UPDATE "+table+" SET age = %s WHERE name = %s",(age, name)) #

Извините, это была ошибка

...