Синтаксис SQLAlchemy .execute () для передачи переменных - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь обновить столбец с именем dhl_team в таблице игроков моей таблицы для указанной строки c с ID 8476923 в качестве примера. Если я запускаю:

db.execute("UPDATE players SET dhl_team = 10 WHERE id = 8476923");

Она обновляет таблицу так, как я ожидаю.

Я бы предпочел передать обновленную информацию из переменных, которые я установил. Например

x = 1
k = 8476923
db.execute("UPDATE players SET dhl_team = 10 WHERE id = 8476923");

Я упал, как будто это должно быть что-то вроде:

x = 1
k = 8476923
db.execute("UPDATE players SET dhl_team = :x", {"x": x}) WHERE id = 8476923"); 

Но это возвращает ошибку;

db.execute("UPDATE players SET dhl_team = :x", {"x": x}) WHERE id = 8476923");
                                                                 ^

SyntaxError: неверный синтаксис

Может кто-нибудь сказать мне, как это должно быть сделано?

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Вот код, который я использовал, который также работал.

x = 1

k = 8476923

db.execute ("ОБНОВЛЕНИЕ проигрывателей SET dhl_team =: x ГДЕ id =: k ", {" x ": x," k ": k});

0 голосов
/ 25 января 2020

В метод .execute необходимо передать два аргумента:

  1. Текст оператора весь SQL, включая заполнители параметров.
  2. A dict содержит имена параметров и их значения.

Так что в вашем случае вы бы смотрели на

import sqlalchemy as sa

# ...

db = sa.create_engine(connection_uri)
sql = sa.text("UPDATE players SET dhl_team = :x WHERE id = 8476923")
params = {"x": 1}
with db.begin() as cnxn:
    cnxn.execute(sql, params)
print("Update completed.")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...