Игнорирование ключевого слова в update запросе
Приключилась досадная ситуация, имя одного из полей таблицы, которую я использую совпадает с ключевым словом pass. При попытке создать update запрос, с указанием этого поля в values выкидывает синтаксическую ошибку. Подскажите как можно обойти эту ситуацию? Поле переименовать невозможно, т.к таблица используется и другими сервисами.
engine = create_engine(config.user_base_data ,echo = False)
meta = MetaData(engine)
connector = engine.connect()
client = Table('client' , meta, autoload = True)
client_ip = Table('client_ip', meta, autoload = True, )
ip_tariff = Table('ip_tariff', meta, autoload = True)
payment = Table('payment', meta, autoload = True)
def update_password(message, password, login):
if password == message.text:текст, выделенный жирным шрифтом
password_update_query = update(client).where(client.c.id == login).values(pass = password)
password_update = connector.execute(password_update_query)
bot.send_message(message.chat.id, 'Пароль изменен')
else:
bot.send_message(message.chat.id, 'Пароли не совпадают')
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Передавайте аргументы разворачивая kwargs:
update(client).where(client.c.id == login).values(**{'pass': password})
Эта проблема не имеет отношения к sqlalchemy или sql. В питоне нельзя использовать ключевые слова в качестве имен:
>>> def f(**kwargs):
... print(kwargs)
...
>>> f(pass=1)
File "<stdin>", line 1
f(pass=1)
^
SyntaxError: invalid syntax
>>> f(**{'pass': 1})
{'pass': 1}