Задать вопрос
@Ignis138

Не могу сделать sql запрос с внутренней переменной python, как?

665bf857467a5386053045.png

Есть данный код, но он не работает, в чем проблема?
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
1. код надо показывать текстом, а не картинкой
2. у тебя SQLAlchemy, нафига ты руками делаешь sql запрос?
3. " не работает" нам вообще ни чего не говорит, всегда показывай traceback ошибки
4. ладно, пропускаем 2 и 3 пункты, где у тебя подстановка degress_id?
Ответ написан
Vindicar
@Vindicar
RTFM!
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})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы