Ignis138, ты основы питона почитай немножечко, чтобы хоть понимать, где у тебя в коде что.
Ты в тексте запроса указал, что у тебя в запросе есть подставляемое значение по имени degress_id. Это имя никак не обязанно коррелировать с именем переменных, sqlalchemy ничего не знает о твоих переменных. Так что теперь ты должен указать, какое значение должно быть подставлено.
with Session(self.engine) as s:
query = """
SELECT direction, profile,budget,commerce,min
FROM directions
WHERE d_id = %(degress_id)s
"""
rows = s.execute(text(query)) # вот где-то тут
Заглядываем в документацию (окей, гугл, sqlalchemy Session execute).
Быстренько находим
ссылку на описание самого класса Session (в противоположность общим объяснениям как им пользоваться).
Ищем описание метода
execute().
Читаем список параметров:
statement – An executable statement (i.e. an Executable expression such as select()).
Иными словами, запрос, который надо выполнить. Ты его передаёшь как text(query).
params – Optional dictionary, or list of dictionaries, containing bound parameter values. If a single dictionary, single-row execution occurs; if a list of dictionaries, an “executemany” will be invoked. The keys in each dictionary must correspond to parameter names present in the statement.
Словарь или список словарей. У тебя один запрос, так что нужен один словарь. Ключи словаря должны соответствовать именам параметров. У тебя в запросе указан один параметр degress_id.
Таким образом, приходим к тому, что вторым параметром нужно передать словарь, в котором есть один ключ "degress_id" и сопоставленное ему значение.
И вот тут мы снова подходим к началу поста: если б ты озаботился почитать про основы языка, в частности, что такое словари (окей, гугл,
python словарь).
Тогда, глядишь, дошёл бы и до такой конструкции:
degress_id_value = ... # тут ты определяешь, какое значение подставляешь в запрос
rows = s.execute(text(query), {"degress_id": degress_id_value})